【Python入門】入門者向けにpipの意味と使い方を解説! パッケージのインストールと管理

Python

Pythonのpipコマンドとは

pythonで使用するpipの正式名称は「Pip Installs Packages」または「Pip Installs Python」で、Pythonモジュールやパッケージのインストールや管理などを行うユーティリティになります。

Python 3.4以降では標準で付属しており、パッケージのインストールは、pip の install コマンドで行います。 パッケージには公式が配布しているものと、サードパーティが配布しているものがあり、公式が配布しているものはPythonをインストールする際に自動的にインストールされます。
サードパーティが配布しているものは、必要に応じて個別にインストールしますが、このサードパーティのパッケージをインストールする時に使用するのがpipになります。

pip -V, –version バージョンの確認

pip -V、又はpip –versionを実行するとpipのバージョンを確認する事が出来ます。pip -Vの場合の「V」は大文字であることに注意です。

pip -V
又は
pip --version

下記のようにどちらのコマンドでも、同じ結果が表示されます。

PS C:\Users\kshim> pip -V
pip 21.2.4 from C:\Users\kshim\anaconda3\lib\site-packages\pip (python 3.9)
PS C:\Users\kshim> pip --version
pip 21.2.4 from C:\Users\kshim\anaconda3\lib\site-packages\pip (python 3.9)

pip -v コマンドやオプションの一覧

pip -vを実行するとpipコマンドの種類やpipコマンドのオプションの一覧を確認する事が出来ます。pip -vの「v」は小文字であることに注意です。

pip -v

下記のように表示されます。

PS C:\Users\kshim> pip -v

Usage:
  pip <command> [options]

Commands:
  install                     Install packages.
  download                    Download packages.
  uninstall                   Uninstall packages.
  freeze                      Output installed packages in requirements format.
  list                        List installed packages.
  show                        Show information about installed packages.
  check                       Verify installed packages have compatible dependencies.
  config                      Manage local and global configuration.
  search                      Search PyPI for packages.
  (以後略)

pip check モジュールの依存関係の確認

pip checkを実行すると、インストール済みのモジュールの依存関係を確認する事ができます。 問題がない場合は「No broken requirements found.」が表示されます。
不足するモジュールがある場合は、そのメッセージが表示されます。 依存関係とは、”このパッケージを使用する時は別のパッケージが必要ですよ”、というパッケージ同士の関係です

pip check

実行すると次の様なメッセージが表示されました。私の場合はいろいろ足りないみたいですね・・・。この例の2行目では、「spyder 5.1.5」というパッケージには「pyqt5」というパッケージが必要なのですが、それがインストールされていない事を伝えています。

PS C:\Users\kshim> pip check
spyder 5.1.5 requires pyqt5, which is not installed.
spyder 5.1.5 requires pyqtwebengine, which is not installed.
conda-repo-cli 1.0.4 requires pathlib, which is not installed.
anaconda-project 0.10.2 requires ruamel-yaml, which is not installed.

pip list パッケージやバージョンの確認

pip list

pip listを実行すると、インストール済みのパッケージやバージョン情報を確認する事ができます。パッケージ名とバージョン情報が表示されます。

pip list

下記はpip listを実行したときの例でインストールされているパッケージが表示されます。 先頭部分の一部を記載していますが、実際は何十個のパッケージが表示されたと思います。 左側にインストールされているパッケージ名、右側にバージョン情報が表示されます。

PS C:\Users\kshim> pip list
Package                       Version
----------------------------- ----------------
aiohttp                       3.8.1
aiosignal                     1.2.0
alabaster                     0.7.12
anaconda-client               1.9.0

pip list –format columns

pip listでは–formatオプションで出力フォーマットを変更できます。formatには、columns, freeze, jsonが指定できます。

pip list --format columns

pip list –format columnsを実行すると下記のように表示されます。pip listと同じ結果になります。

PS C:\Users\kshim> pip list --format columns
Package                       Version
----------------------------- ----------------
aiohttp                       3.8.1
aiosignal                     1.2.0
alabaster                     0.7.12
anaconda-client               1.9.0

pip list –format freeze

パッケージ名==バージョン情報の形式で出力するにはformatにfreezeを指定します。

pip list --format freeze

pip list –format freezeを実行すると下記のように表示されます。この結果はpip freezeを実行した時も同じになります。

PS C:\Users\kshim> pip list --format freeze
aiohttp==3.8.1
aiosignal==1.2.0
alabaster==0.7.12
anaconda-client==1.9.0

pip list –format json

パッケージ情報を他で使用するためにjson形式での出力が可能です。formatにjsonを指定します。

pip list --format json

pip list –format jsonを実行すると下記のよう表示されます。

PS C:\Users\kshim> pip list --format json
[{"name": "aiohttp", "version": "3.8.1"}, {"name": "aiosignal", "version": "1.2.0"}, {"name": "alabaster", "version": "0.7.12"}, {"namtoe": "anaconda-client", "version": "1.9.0"}, ・・・・

pip list -u, –uptodate

pip listに-uまたは–uptodateオプション指定すると、最新版になっているパッケージのみを表示させることが出来ます。

pip list -u
又は
pip list --uptodate

pip list -u、もしくはpip list –uptodateを実行すると下記のように表示されます。

PS C:\Users\kshim> pip list -u
Package                       Version
----------------------------- -----------
appdirs                       1.4.4
argon2-cffi                   21.3.0
argon2-cffi-bindings          21.2.0
async-generator               1.10
PS C:\Users\kshim> pip list --uptodate
Package                       Version
----------------------------- -----------
appdirs                       1.4.4
argon2-cffi                   21.3.0
argon2-cffi-bindings          21.2.0
async-generator               1.10

pip list -o, –outdated

pip listに-oまたは–outdatedオプション指定すると、最新版になっていないパッケージのみを表示させることが出来ます。

pip list -o
又は
pip list --outdated

pip list -o、もしくはpip list –outdatedを実行すると下記のように表示されます。

PS C:\Users\kshim> pip list -o
Package                  Version          Latest          Type
------------------------ ---------------- --------------- -----
aiohttp                  3.8.1            3.8.4           wheel
aiosignal                1.2.0            1.3.1           wheel
alabaster                0.7.12           0.7.13          wheel
PS C:\Users\kshim> pip list --outdated
Package                  Version          Latest          Type
------------------------ ---------------- --------------- -----
aiohttp                  3.8.1            3.8.4           wheel
aiosignal                1.2.0            1.3.1           wheel
alabaster                0.7.12           0.7.13          wheel

pip list –not-required

pip listに–not-requiredオプション指定すると、他のパッケージと依存関係のないパッケージのみを表示させることが出来ます。

pip list --not-required

pip list –not-requiredを実行すると下記のように表示されます

PS C:\Users\kshim> pip list --not-required
Package                Version
---------------------- ----------------
aiohttp                3.8.1
anaconda-navigator     2.1.4
anaconda-project       0.10.2

pip freeze パッケージやバージョンの確認・出力

pip freeze

pythonのアプリケーションを複数人で開発する時は、pythonのパッケージ環境を共有する必要があります。 一つ一つパッケージをインストールする事も可能なのですが、パッケージ情報をファイルに出力や取込が出来れば、より簡単に環境を共有する事ができます。
pip freezeを使用すると、パッケージ情報をファイル出力する事ができます。

pip freeze

pip freezeを実行すると下記のように表示されます

PS C:\Users\kshim> pip freeze
aiohttp==3.8.1
aiosignal==1.2.0
alabaster==0.7.12
anyio==3.5.0

pip freezeを実行すると、本来なら上記のように「パッケージ名==バージョン情報」が表示されるはずが、下記のように「パッケージ名 @ file://・・・」と混在して表示される場合があります。

PS C:\Users\kshim> pip freeze
aiohttp @ file:///C:/ci/aiohttp_1646788390724/work
aiosignal @ file:///tmp/build/80754af9/aiosignal_1637843061372/work
alabaster @ file:///home/ktietz/src/ci/alabaster_1611921544520/work
anaconda-client @ file:///C:/ci/anaconda-client_1635324559101/work
anaconda-navigator==2.1.4
appdirs==1.4.4

@fileが表示される明確な原因はわかりませんが、WindowsでAnacondaを使っているとこのような表示になることが多いようですが、Anacondaを使用していない場合でも、このような表示になる場合があるみたいです。

別の方法

pip list –format freezeを実行すればpip freezeと同じ結果なので、@ file://・・・の表示になる場合は、別の方法としてpip list –format freezeを使用しましょう。

pip freeze > requirements.txt

pythonのパッケージ環境をファイル出力するには、pip freeze > requirements.txtを実行します。「requirements.txt」のファイルが生成されます。

pip freeze > requirements.txt

ファイルを確認すると、パッケージ名とバージョン情報が記載されています。

aiohttp==3.8.1
aiosignal==1.2.0
alabaster==0.7.12
anaconda-client==1.9.0
anaconda-navigator==2.1.4
anaconda-project==0.10.2

pip freeze > requirements.txtを実行すると、本来なら上記のように「パッケージ名==バージョン情報」が記録されるはずが、「パッケージ名 @ file://・・・」と混在して記録される場合があります。 @fileが出力される明確な原因はわかりませんが、WindowsでAnacondaを使っているとこのような表示になることが多いようです。Anacondaを使用していない場合でも、このような表示になる場合があるみたいです。

別の方法

pip list –format freeze > requirements.txtを実行すればpip freezeと同じ結果なので、@ file://・・・の表示になる場合は、別の方法としてpip list –format freeze > requirements.txtを使用しましょう。