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 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を使用していない場合でも、このような表示になる場合があるみたいです。