pip でパッケージを管理する

Python はそれ単体では基本的なことしかできません。しかし、世界中のスーパープログラマーによって開発されたライブラリ群、つまりパッケージを使うことで高機能なプログラムを記述することができます。

しかし、これらのパッケージは、他のパッケージとの依存関係などがあり、これらをすべて調べ上げたうえで、適切なバージョンをインストールするには初心者には大変な苦労です。初心者にはできないといっても過言ではありません。

そこで Python には pip というパッケージ管理ツールが用意されており、これを使えば初心者にも簡単にパッケージを扱うことが可能です。

pip を最新バージョンにする

まずは、お作法として pip ツールで作業をやるときは必ず、pip 自体を最新にすることをお勧めします。pip install --upgrade pip とします。

アップグレード(upgrade)が正しいです、アップデート(update) ではありません。

PS C:\tmp> pip install --upgrade pip
Requirement already satisfied: pip in c:\users\admin\appdata\local\programs\python\python310\lib\site-packages (22.2.2)

通常は、pip install --upgrade pip を発行するだけでかまいません。
もし、最終行付近に下記のように [notice] がでてきたら、

PS C:\tmp> pip install --upgrade pip
Requirement already satisfied: pip in c:\users\admin\appdata\local\programs\python\python310\lib\site-packages (22.1.2)
Collecting pip
  Using cached pip-22.2.2-py3-none-any.whl (2.0 MB)
ERROR: To modify pip, please run the following command:
C:\Users\admin\AppData\Local\Programs\Python\Python310\python.exe -m pip install --upgrade pip

[notice] A new release of pip available: 22.1.2 -> 22.2.2
[notice] To update, run: python.exe -m pip install --upgrade pip

そこに書いてあるとおりに python.exe -m pip install --upgrade pip というコマンドを発行しましょう。

PS C:\tmp> python.exe -m pip install --upgrade pip
Requirement already satisfied: pip in c:\users\admin\appdata\local\programs\python\python310\lib\site-packages (22.1.2)
Collecting pip
  Using cached pip-22.2.2-py3-none-any.whl (2.0 MB)
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 22.1.2
    Uninstalling pip-22.1.2:
      Successfully uninstalled pip-22.1.2
Successfully installed pip-22.2.2

最後に念のため pip install --upgrade pip してもいいですね。

pipツールのバージョンを確認するには pip --version というコマンドを発行します。pip -V という省略オプションでもかまいません。

PS C:\tmp> pip --version
pip 22.2.2 from C:\Users\admin\AppData\Local\Programs\Python\Python310\lib\site-packages\pip (python 3.10)

PS C:\tmp> pip -V
pip 22.2.2 from C:\Users\admin\AppData\Local\Programs\Python\Python310\lib\site-packages\pip (python 3.10)

[notice] で指摘されていた事項について、22.1.2 から 22.2.2 になったことが確認できました。

テストケース、Flaskパッケージのインストール

前置きが長くなってしまいました。ここからは、ウェブサーバーを簡単に作成できる "Flask" というパッケージをインストールすることを例にして解説を進めます。

パッケージがインストールされているか調べる

所望のパッケージがインストールされているか調べるには pip list というコマンドを使います。出力の書式が違いますが pip freeze というコマンドでもかまいません。

PS C:\tmp> pip list
Package              Version
-------------------- ------------
argon2-cffi          21.3.0
argon2-cffi-bindings 21.2.0
asttokens            2.0.5
attrs                21.4.0
backcall             0.2.0
beautifulsoup4       4.11.1
bleach               5.0.1
certifi              2022.6.15
cffi                 1.15.1
charset-normalizer   2.1.0
click                8.1.3
colorama             0.4.5
cycler               0.11.0
debugpy              1.6.2
decorator            5.1.1
defusedxml           0.7.1
entrypoints          0.4
executing            0.8.3
fastjsonschema       2.15.3
fonttools            4.34.4
idna                 3.3
ipykernel            6.15.1
ipython              8.4.0
ipython-genutils     0.2.0
itsdangerous         2.1.2
jedi                 0.18.1
Jinja2               3.1.2
joblib               1.1.0
jsonschema           4.6.2
jupyter-client       7.3.4
jupyter-core         4.11.1
jupyterlab-pygments  0.2.2
kiwisolver           1.4.3
MarkupSafe           2.1.1
matplotlib           3.5.2
matplotlib-inline    0.1.3
mistune              0.8.4
nbclient             0.6.6
nbconvert            6.5.0
nbformat             5.4.0
nest-asyncio         1.5.5
notebook             6.4.12
numpy                1.23.1
packaging            21.3
pandocfilters        1.5.0
parso                0.8.3
pickleshare          0.7.5
Pillow               9.2.0
pip                  22.1.2
prometheus-client    0.14.1
prompt-toolkit       3.0.30
psutil               5.9.1
pure-eval            0.2.2
pycparser            2.21
Pygments             2.12.0
pyparsing            3.0.9
pyrsistent           0.18.1
python-dateutil      2.8.2
pywin32              304
pywinpty             2.0.6
pyzmq                23.2.0
requests             2.28.1
scikit-learn         1.1.1
scipy                1.8.1
Send2Trash           1.8.0
setuptools           58.1.0
six                  1.16.0
soupsieve            2.3.2.post1
stack-data           0.3.0
terminado            0.15.0
threadpoolctl        3.1.0
tinycss2             1.1.1
torch                1.12.0+cu116
torchaudio           0.12.0+cu116
torchvision          0.13.0+cu116
tornado              6.2
traitlets            5.3.0
typing_extensions    4.3.0
urllib3              1.26.10
wcwidth              0.2.5
webencodings         0.5.1
Werkzeug             2.2.1

Flask というパッケージがリストアップされていないので、まだインストールされていないことがわかります。

パッケージをインストールする

パッケージをインストールするには pip install Flask とします。依存関係を解決したうえで、その解決条件において最新バージョンのパッケージがインストールされます。

PS C:\tmp> pip install Flask
Collecting Flask
  Using cached Flask-2.2.1-py3-none-any.whl (101 kB)
Requirement already satisfied: itsdangerous>=2.0 in c:\users\admin\appdata\local\programs\python\python310\lib\site-packages (from Flask) (2.1.2)
Requirement already satisfied: Jinja2>=3.0 in c:\users\admin\appdata\local\programs\python\python310\lib\site-packages (from Flask) (3.1.2)
Requirement already satisfied: Werkzeug>=2.2.0 in c:\users\admin\appdata\local\programs\python\python310\lib\site-packages (from Flask) (2.2.1)
Requirement already satisfied: click>=8.0 in c:\users\admin\appdata\local\programs\python\python310\lib\site-packages (from Flask) (8.1.3)
Requirement already satisfied: colorama in c:\users\admin\appdata\local\programs\python\python310\lib\site-packages (from click>=8.0->Flask) (0.4.5)
Requirement already satisfied: MarkupSafe>=2.0 in c:\users\admin\appdata\local\programs\python\python310\lib\site-packages (from Jinja2>=3.0->Flask) (2.1.1)
Installing collected packages: Flask
Successfully installed Flask-2.2.1

最後の行を見るとバージョン 2.2.1 のインストールが成功したことがわかります。

パッケージがインストールできたか確認する

いちおう pip list で調べます。

PS C:\tmp> pip list
Package              Version
-------------------- ------------
argon2-cffi          21.3.0
argon2-cffi-bindings 21.2.0
asttokens            2.0.5
attrs                21.4.0
backcall             0.2.0
beautifulsoup4       4.11.1
bleach               5.0.1
certifi              2022.6.15
cffi                 1.15.1
charset-normalizer   2.1.0
click                8.1.3
colorama             0.4.5
cycler               0.11.0
debugpy              1.6.2
decorator            5.1.1
defusedxml           0.7.1
entrypoints          0.4
executing            0.8.3
fastjsonschema       2.15.3
Flask                2.2.1
fonttools            4.34.4
idna                 3.3
ipykernel            6.15.1
ipython              8.4.0
ipython-genutils     0.2.0
itsdangerous         2.1.2
jedi                 0.18.1
Jinja2               3.1.2
joblib               1.1.0
jsonschema           4.6.2
jupyter-client       7.3.4
jupyter-core         4.11.1
jupyterlab-pygments  0.2.2
kiwisolver           1.4.3
MarkupSafe           2.1.1
matplotlib           3.5.2
matplotlib-inline    0.1.3
mistune              0.8.4
nbclient             0.6.6
nbconvert            6.5.0
nbformat             5.4.0
nest-asyncio         1.5.5
notebook             6.4.12
numpy                1.23.1
packaging            21.3
pandocfilters        1.5.0
parso                0.8.3
pickleshare          0.7.5
Pillow               9.2.0
pip                  22.1.2
prometheus-client    0.14.1
prompt-toolkit       3.0.30
psutil               5.9.1
pure-eval            0.2.2
pycparser            2.21
Pygments             2.12.0
pyparsing            3.0.9
pyrsistent           0.18.1
python-dateutil      2.8.2
pywin32              304
pywinpty             2.0.6
pyzmq                23.2.0
requests             2.28.1
scikit-learn         1.1.1
scipy                1.8.1
Send2Trash           1.8.0
setuptools           58.1.0
six                  1.16.0
soupsieve            2.3.2.post1
stack-data           0.3.0
terminado            0.15.0
threadpoolctl        3.1.0
tinycss2             1.1.1
torch                1.12.0+cu116
torchaudio           0.12.0+cu116
torchvision          0.13.0+cu116
tornado              6.2
traitlets            5.3.0
typing_extensions    4.3.0
urllib3              1.26.10
wcwidth              0.2.5
webencodings         0.5.1
Werkzeug             2.2.1

23行目に Flask 2.2.1 がリストアップされており、インストールされていることがわかります。

インストールできるパッケージのバージョンを調べる

なんらかの理由で Flask のバージョン 2.2.1 が使えず、以前のバージョンをインストールしなければならない場合は、まずそのバージョンが存在するか調べなくてはなりません。

pip install Flask== のようにパッケージ名称の後ろに == を付加したコマンドを実行して過去のバージョンを列挙します。

コンソールに表示された ERROR: という表示はあまり気にしないでください。本記事の最後まで読んでいただければ == の本来の使い方がわかります。

PS C:\tmp> pip install Flask==
ERROR: bCould not find a version that satisfies the requirement
Flask== (from versions: 0.1, 0.2, 0.3, 0.3.1, 0.4, 0.5, 0.5.1, 0.5.2, 0.6,
0.6.1, 0.7, 0.7.1, 0.7.2, 0.8, 0.8.1, 0.9, 0.10, 0.10.1, 0.11, 0.11.1, 0.12,
0.12.1, 0.12.2, 0.12.3, 0.12.4, 0.12.5, 1.0, 1.0.1, 1.0.2, 1.0.3, 1.0.4,
1.1.0, 1.1.1, 1.1.2, 1.1.3, 1.1.4, 2.0.0rc1, 2.0.0rc2, 2.0.0, 2.0.1, 2.0.2,
2.0.3, 2.1.0, 2.1.1, 2.1.2, 2.1.3, 2.2.0, 2.2.1)
ERROR: No matching distribution found for Flask==

バージョン 0.1 とかは Flask 誕生時のテスト感がありますね。

本記事は Flask 2.2.1 をアンインストールして、ふたたび Flask 2.2.0 をインストールするストーリーで解説を続けます。

パッケージをアンインストールする

所望のバージョンの Flask をインストールするために、いったん Flask 2.2.1 パッケージをアンインストールします。pip uninstall Flask とします。途中で イエス or ノーを聞かれるので、ここで Y/n の Y を入力します。

PS C:\tmp> pip uninstall Flask
Found existing installation: Flask 2.2.1
Uninstalling Flask-2.2.1:
  Would remove:
    c:\users\admin\appdata\local\programs\python\python310\lib\site-packages\flask-2.2.1.dist-info\*
    c:\users\admin\appdata\local\programs\python\python310\lib\site-packages\flask\*
    c:\users\admin\appdata\local\programs\python\python310\scripts\flask.exe
Proceed (Y/n)? Y
  Successfully uninstalled Flask-2.2.1

アンインストールが Successfully で完了しました。

パッケージがアンインストールできたか調べる

いちおうアンインストールできたかどうか pip list で確認します。

PS C:\tmp> pip list
Package              Version
-------------------- ------------
argon2-cffi          21.3.0
argon2-cffi-bindings 21.2.0
asttokens            2.0.5
attrs                21.4.0
backcall             0.2.0
beautifulsoup4       4.11.1
bleach               5.0.1
certifi              2022.6.15
cffi                 1.15.1
charset-normalizer   2.1.0
click                8.1.3
colorama             0.4.5
cycler               0.11.0
debugpy              1.6.2
decorator            5.1.1
defusedxml           0.7.1
entrypoints          0.4
executing            0.8.3
fastjsonschema       2.15.3
fonttools            4.34.4
idna                 3.3
ipykernel            6.15.1
ipython              8.4.0
ipython-genutils     0.2.0
itsdangerous         2.1.2
jedi                 0.18.1
Jinja2               3.1.2
joblib               1.1.0
jsonschema           4.6.2
jupyter-client       7.3.4
jupyter-core         4.11.1
jupyterlab-pygments  0.2.2
kiwisolver           1.4.3
MarkupSafe           2.1.1
matplotlib           3.5.2
matplotlib-inline    0.1.3
mistune              0.8.4
nbclient             0.6.6
nbconvert            6.5.0
nbformat             5.4.0
nest-asyncio         1.5.5
notebook             6.4.12
numpy                1.23.1
packaging            21.3
pandocfilters        1.5.0
parso                0.8.3
pickleshare          0.7.5
Pillow               9.2.0
pip                  22.1.2
prometheus-client    0.14.1
prompt-toolkit       3.0.30
psutil               5.9.1
pure-eval            0.2.2
pycparser            2.21
Pygments             2.12.0
pyparsing            3.0.9
pyrsistent           0.18.1
python-dateutil      2.8.2
pywin32              304
pywinpty             2.0.6
pyzmq                23.2.0
requests             2.28.1
scikit-learn         1.1.1
scipy                1.8.1
Send2Trash           1.8.0
setuptools           58.1.0
six                  1.16.0
soupsieve            2.3.2.post1
stack-data           0.3.0
terminado            0.15.0
threadpoolctl        3.1.0
tinycss2             1.1.1
torch                1.12.0+cu116
torchaudio           0.12.0+cu116
torchvision          0.13.0+cu116
tornado              6.2
traitlets            5.3.0
typing_extensions    4.3.0
urllib3              1.26.10
wcwidth              0.2.5
webencodings         0.5.1
Werkzeug             2.2.1

Flask 2.2.1 がリストから消えています。

バージョンを指定してパッケージをインストールする

いったん Flask がアンインストールできたので、今度は pip install Flask==2.2.0 のようにバージョンを指定してインストールします。

PS C:\tmp> pip install Flask==2.2.0
Collecting Flask==2.2.0
  Downloading Flask-2.2.0-py3-none-any.whl (101 kB)
     ---------------------------------------- 101.1/101.1 kB 966.8 kB/s eta 0:00:00
Requirement already satisfied: click>=8.0 in c:\users\admin\appdata\local\programs\python\python310\lib\site-packages (from Flask==2.2.0) (8.1.3)
Requirement already satisfied: Jinja2>=3.0 in c:\users\admin\appdata\local\programs\python\python310\lib\site-packages (from Flask==2.2.0) (3.1.2)
Requirement already satisfied: Werkzeug>=2.2.0 in c:\users\admin\appdata\local\programs\python\python310\lib\site-packages (from Flask==2.2.0) (2.2.1)
Requirement already satisfied: itsdangerous>=2.0 in c:\users\admin\appdata\local\programs\python\python310\lib\site-packages (from Flask==2.2.0) (2.1.2)
Requirement already satisfied: colorama in c:\users\admin\appdata\local\programs\python\python310\lib\site-packages (from click>=8.0->Flask==2.2.0) (0.4.5)
Requirement already satisfied: MarkupSafe>=2.0 in c:\users\admin\appdata\local\programs\python\python310\lib\site-packages (from Jinja2>=3.0->Flask==2.2.0) (2.1.1)
Installing collected packages: Flask
Successfully installed Flask-2.2.0

インストールが Successfully で完了しました。

いちおう pip list で調べます。

PS C:\tmp> pip list
Package              Version
-------------------- ------------
argon2-cffi          21.3.0
argon2-cffi-bindings 21.2.0
asttokens            2.0.5
attrs                21.4.0
backcall             0.2.0
beautifulsoup4       4.11.1
bleach               5.0.1
certifi              2022.6.15
cffi                 1.15.1
charset-normalizer   2.1.0
click                8.1.3
colorama             0.4.5
cycler               0.11.0
debugpy              1.6.2
decorator            5.1.1
defusedxml           0.7.1
entrypoints          0.4
executing            0.8.3
fastjsonschema       2.15.3
Flask                2.2.0
fonttools            4.34.4
idna                 3.3
ipykernel            6.15.1
ipython              8.4.0
ipython-genutils     0.2.0
itsdangerous         2.1.2
jedi                 0.18.1
Jinja2               3.1.2
joblib               1.1.0
jsonschema           4.6.2
jupyter-client       7.3.4
jupyter-core         4.11.1
jupyterlab-pygments  0.2.2
kiwisolver           1.4.3
MarkupSafe           2.1.1
matplotlib           3.5.2
matplotlib-inline    0.1.3
mistune              0.8.4
nbclient             0.6.6
nbconvert            6.5.0
nbformat             5.4.0
nest-asyncio         1.5.5
notebook             6.4.12
numpy                1.23.1
packaging            21.3
pandocfilters        1.5.0
parso                0.8.3
pickleshare          0.7.5
Pillow               9.2.0
pip                  22.1.2
prometheus-client    0.14.1
prompt-toolkit       3.0.30
psutil               5.9.1
pure-eval            0.2.2
pycparser            2.21
Pygments             2.12.0
pyparsing            3.0.9
pyrsistent           0.18.1
python-dateutil      2.8.2
pywin32              304
pywinpty             2.0.6
pyzmq                23.2.0
requests             2.28.1
scikit-learn         1.1.1
scipy                1.8.1
Send2Trash           1.8.0
setuptools           58.1.0
six                  1.16.0
soupsieve            2.3.2.post1
stack-data           0.3.0
terminado            0.15.0
threadpoolctl        3.1.0
tinycss2             1.1.1
torch                1.12.0+cu116
torchaudio           0.12.0+cu116
torchvision          0.13.0+cu116
tornado              6.2
traitlets            5.3.0
typing_extensions    4.3.0
urllib3              1.26.10
wcwidth              0.2.5
webencodings         0.5.1
Werkzeug             2.2.1

23行目に Flask 2.2.0 がリストアップされており、所望のバージョンがインストールされていることがわかります。

インストールされているパッケージの詳細を調べる

pip show というコマンドを使って、インストールされている Flask パッケージの詳細を調べてみます。

PS C:\tmp> pip show Flask
Name: Flask
Version: 2.2.0
Summary: A simple framework for building complex web applications.
Home-page: https://palletsprojects.com/p/flask
Author: Armin Ronacher
Author-email: armin.ronacher@active-4.com
License: BSD-3-Clause
Location: c:\users\admin\appdata\local\programs\python\python310\lib\site-packages
Requires: click, itsdangerous, Jinja2, Werkzeug
Required-by:

Armin Ronacher さんが中心になって作成したパッケージということがわかりますね。こんなに素晴らしいパッケージを公開してくれて、ほんとうにありがたいです。

以上がパッケージ管理の流れです。記事の流れの都合上、今の状態は Flask 2.2.0 がインストールされた状態ですので、最新版の Flask に戻してください。

pip uninstall Flask
pip install Flask

で Flask の最新版がインストールされているはずです。pip list または pip freeze でバージョンが最新であることを確認してください。

ずっと pip list を使ってきたので、最後に pip freeze を発行してみましょう。

PS C:\tmp> pip freeze
argon2-cffi==21.3.0
argon2-cffi-bindings==21.2.0
asttokens==2.0.5
attrs==21.4.0
backcall==0.2.0
beautifulsoup4==4.11.1
bleach==5.0.1
certifi==2022.6.15
cffi==1.15.1
charset-normalizer==2.1.0
click==8.1.3
colorama==0.4.5
cycler==0.11.0
debugpy==1.6.2
decorator==5.1.1
defusedxml==0.7.1
entrypoints==0.4
executing==0.8.3
fastjsonschema==2.15.3
Flask==2.2.1
fonttools==4.34.4
idna==3.3
ipykernel==6.15.1
ipython==8.4.0
ipython-genutils==0.2.0
itsdangerous==2.1.2
jedi==0.18.1
Jinja2==3.1.2
joblib==1.1.0
jsonschema==4.6.2
jupyter-client==7.3.4
jupyter-core==4.11.1
jupyterlab-pygments==0.2.2
kiwisolver==1.4.3
MarkupSafe==2.1.1
matplotlib==3.5.2
matplotlib-inline==0.1.3
mistune==0.8.4
nbclient==0.6.6
nbconvert==6.5.0
nbformat==5.4.0
nest-asyncio==1.5.5
notebook==6.4.12
numpy==1.23.1
packaging==21.3
pandocfilters==1.5.0
parso==0.8.3
pickleshare==0.7.5
Pillow==9.2.0
prometheus-client==0.14.1
prompt-toolkit==3.0.30
psutil==5.9.1
pure-eval==0.2.2
pycparser==2.21
Pygments==2.12.0
pyparsing==3.0.9
pyrsistent==0.18.1
python-dateutil==2.8.2
pywin32==304
pywinpty==2.0.6
pyzmq==23.2.0
requests==2.28.1
scikit-learn==1.1.1
scipy==1.8.1
Send2Trash==1.8.0
six==1.16.0
soupsieve==2.3.2.post1
stack-data==0.3.0
terminado==0.15.0
threadpoolctl==3.1.0
tinycss2==1.1.1
torch==1.12.0+cu116
torchaudio==0.12.0+cu116
torchvision==0.13.0+cu116
tornado==6.2
traitlets==5.3.0
typing_extensions==4.3.0
urllib3==1.26.10
wcwidth==0.2.5
webencodings==0.5.1
Werkzeug==2.2.1

こんな感じでバージョンが出力されます。21行目に Flask 2.2.1 が示されています。

以上です。