pip uninstall -r requirementsの動作を確認する

Pythonのパッケージ管理システムのpipでは、requirements.txtに必要なパッケージを記述しておくことで、

  • pip install -r requirements.txt で一括インストール
  • pip uninstall -r requirements.txt で一括アンインストール

ができます。

そんな中、pip uninstall -r requirements.txtの動作を確認したのメモを残しておきます。

 

環境

  • Windows10 x64
  • Python 3.5.1 32bit
  • pip 8.1.2

 

確認

依存パッケージやPython拡張モジュールのアンインストール

依存パッケージのあるFlaskと、Python拡張モジュールをビルドする必要のあるPyCryptoに依存しているPySNMPのアンインストールを確認します。

# virtualenv環境を作成
D:\Sandbox\pip_uninstall>virtualenv -p c:\python35-32\python.exe env
...
Installing setuptools, pip, wheel...done.
D:\Sandbox\pip_uninstall>env\Scripts\activate

# インストール前の状態確認
(env) D:\Sandbox\pip_uninstall>pip list
pip (8.1.2)
setuptools (23.0.0)
wheel (0.29.0)

# 依存パッケージのあるFlaskをインストール
(env) D:\Sandbox\pip_uninstall>pip install flask

# 依存パッケージのPyScryptoでビルドが必要な、PySNMPをインストール
(env) D:\Sandbox\pip_uninstall>pip install pysnmp

# インストール後
(env) D:\Sandbox\pip_uninstall>pip list
click (6.6)
Flask (0.11.1)
itsdangerous (0.24)
Jinja2 (2.8)
MarkupSafe (0.23)
pip (8.1.2)
ply (3.8)
pyasn1 (0.1.9)
pycrypto (2.6.1)
pysmi (0.0.7)
pysnmp (4.3.2)
setuptools (23.0.0)
Werkzeug (0.11.10)
wheel (0.29.0)

# requirements.txtファイルに書き出し
(env) D:\Sandbox\pip_uninstall>pip freeze > requirements.txt

# requirements.txtファイルの中身を確認
# インストール前にあった、pip, setuptools, wheelの記載なし
(env) D:\Sandbox\pip_uninstall>type requirements.txt
click==6.6
Flask==0.11.1
itsdangerous==0.24
Jinja2==2.8
MarkupSafe==0.23
ply==3.8
pyasn1==0.1.9
pycrypto==2.6.1
pysmi==0.0.7
pysnmp==4.3.2
Werkzeug==0.11.10

# アンインストール
(env) D:\Sandbox\pip_uninstall>pip uninstall -r requirements.txt
Uninstalling click-6.6:
...
Proceed (y/n)? y
  Successfully uninstalled click-6.6
Uninstalling Flask-0.11.1:
...
Proceed (y/n)? y
...
# 以降、該当するパッケージについて、すべて "y" を入力

# 再度確認
# 記載のなかった、pip, setuptools, wheelだけが残った
(env) D:\Sandbox\pip_uninstall>pip list
pip (8.1.2)
setuptools (23.0.0)
wheel (0.29.0)

requirements.txtに記載されたパッケージは削除されています。

 

ローカルファイルからインストールしたパッケージのアンインストール

ローカルファイルpycrypto-2.6.1-cp35-none-win32.whlのインストールとアンインストールを確認します。

# Flaskをインストール
(env) D:\Sandbox\pip_uninstall>pip install flask

# requirements.txtに書き出しと、ローカルにあるPyCryptoの追加
(env) D:\Sandbox\pip_uninstall>pip freeze > requirements.txt
(env) D:\Sandbox\pip_uninstall>echo pycrypto-2.6.1-cp35-none-win32.whl >> requirements.txt

# requirements.txtの確認
(env) D:\Sandbox\pip_uninstall>type requirements.txt
click==6.6
Flask==0.11.1
itsdangerous==0.24
Jinja2==2.8
MarkupSafe==0.23
Werkzeug==0.11.10
pycrypto-2.6.1-cp35-none-win32.whl

# PyCryptoはインストールされていない
(env) D:\Sandbox\pip_uninstall>pip list
click (6.6)
Flask (0.11.1)
itsdangerous (0.24)
Jinja2 (2.8)
MarkupSafe (0.23)
pip (8.1.2)
setuptools (23.0.0)
Werkzeug (0.11.10)
wheel (0.29.0)

# PyCryptoのインストールと確認
(env) D:\Sandbox\pip_uninstall>pip install -r requirements.txt
...
Successfully installed pycrypto-2.6.1

(env) D:\Sandbox\pip_uninstall>pip list
click (6.6)
Flask (0.11.1)
itsdangerous (0.24)
Jinja2 (2.8)
MarkupSafe (0.23)
pip (8.1.2)
pycrypto (2.6.1)
setuptools (23.0.0)
Werkzeug (0.11.10)
wheel (0.29.0)

# requirements.txtを使ったアンインストール
# "-y"オプションで、アンインストールの確認を省略
(env) D:\Sandbox\pip_uninstall>pip uninstall -r requirements.txt -y
Uninstalling click-6.6:
  Successfully uninstalled click-6.6
Uninstalling Flask-0.11.1:
  Successfully uninstalled Flask-0.11.1
Uninstalling itsdangerous-0.24:
  Successfully uninstalled itsdangerous-0.24
Uninstalling Jinja2-2.8:
  Successfully uninstalled Jinja2-2.8
Uninstalling MarkupSafe-0.23:
  Successfully uninstalled MarkupSafe-0.23
Uninstalling Werkzeug-0.11.10:
  Successfully uninstalled Werkzeug-0.11.10
Uninstalling pycrypto-2.6.1:
  Successfully uninstalled pycrypto-2.6.1

# ローカルからインストールされたものもアンインストールされた
(env) D:\Sandbox\pip_uninstall>pip list
pip (8.1.2)
setuptools (23.0.0)
wheel (0.29.0)

こちらも、requirements.txtに記載されたパッケージは削除されました。

 

参考

pipの使い方 (2014/1バージョン) — そこはかとなく書くよん。