てくなべ (tekunabe)

ansible / network automation / 学習メモ

pip install コマンドの --dry-run コマンドで、インストール予定のパッケージを確認する

、# はじめに

たまたまですが、pip install コマンドに --dry-run オプションが有ることを知りました。

連想できる通り、指定したパッケージを実際にはインストールせずに、依存パッケージ含めて何がインストールされる予定かを教えてくれるオプションです。

2022年7月リリースの 22.2 で追加されたようです。

Add --dry-run option to pip install, to let it print what it would install but not actually change anything in the target environment. (#11096)

https://pip.pypa.io/en/stable/news/#v22-2

早速試してみました。

  • 検証環境

おためし

以下の状態から始めます

% pip list
Package    Version
---------- -------
pip        23.2.1
setuptools 67.6.1

ansible-core--dry-run 付きで install 実行してみます。

% pip install ansible-core --dry-run
Collecting ansible-core
  Obtaining dependency information for ansible-core from https://files.pythonhosted.org/packages/6a/46/f3a297c7b316f7bcdbd9d82162440f316182215f4071c61d4d21dd158940/ansible_core-2.15.2-py3-none-any.whl.metadata
  Downloading ansible_core-2.15.2-py3-none-any.whl.metadata (7.5 kB)
Collecting jinja2>=3.0.0 (from ansible-core)
  Using cached Jinja2-3.1.2-py3-none-any.whl (133 kB)
Collecting PyYAML>=5.1 (from ansible-core)
  Obtaining dependency information for PyYAML>=5.1 from https://files.pythonhosted.org/packages/ec/0d/26fb23e8863e0aeaac0c64e03fd27367ad2ae3f3cccf3798ee98ce160368/PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl.metadata
  Downloading PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl.metadata (2.1 kB)
Collecting cryptography (from ansible-core)
  Obtaining dependency information for cryptography from https://files.pythonhosted.org/packages/f0/f7/49c9d11c7ef9d335d6916c4360ec0c299c523cf12c502323a85379c1e7b9/cryptography-41.0.2-cp37-abi3-macosx_10_12_x86_64.whl.metadata
  Downloading cryptography-41.0.2-cp37-abi3-macosx_10_12_x86_64.whl.metadata (5.2 kB)
Collecting packaging (from ansible-core)
  Using cached packaging-23.1-py3-none-any.whl (48 kB)
Collecting resolvelib<1.1.0,>=0.5.3 (from ansible-core)
  Using cached resolvelib-1.0.1-py2.py3-none-any.whl (17 kB)
Collecting MarkupSafe>=2.0 (from jinja2>=3.0.0->ansible-core)
  Obtaining dependency information for MarkupSafe>=2.0 from https://files.pythonhosted.org/packages/c0/c7/171f5ac6b065e1425e8fabf4a4dfbeca76fd8070072c6a41bd5c07d90d8b/MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl.metadata
  Downloading MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl.metadata (3.0 kB)
Collecting cffi>=1.12 (from cryptography->ansible-core)
  Using cached cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl (179 kB)
Collecting pycparser (from cffi>=1.12->cryptography->ansible-core)
  Using cached pycparser-2.21-py2.py3-none-any.whl (118 kB)
Downloading ansible_core-2.15.2-py3-none-any.whl (2.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2/2.2 MB 4.9 MB/s eta 0:00:00
Using cached PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl (187 kB)
Downloading cryptography-41.0.2-cp37-abi3-macosx_10_12_x86_64.whl (2.8 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.8/2.8 MB 4.5 MB/s eta 0:00:00
Downloading MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl (13 kB)
Would install Jinja2-3.1.2 MarkupSafe-2.1.3 PyYAML-6.0.1 ansible-core-2.15.2 cffi-1.15.1 cryptography-41.0.2 packaging-23.1 pycparser-2.21 resolvelib-1.0.1
%

最終行で、Jinja2-3.1.2 MarkupSafe-2.1.3 PyYAML-6.0.1 ansible-core-2.15.2 cffi-1.15.1 cryptography-41.0.2 packaging-23.1 pycparser-2.21 resolvelib-1.0.1 がインストールされる予定と表示されました。

実際にはインストールされていません。

 % pip list
Package    Version
---------- -------
pip        23.2.1
setuptools 67.6.1

一応、実際にインストールもしてみます。

% pip install ansible-core          
Collecting ansible-core
  Obtaining dependency information for ansible-core from https://files.pythonhosted.org/packages/6a/46/f3a297c7b316f7bcdbd9d82162440f316182215f4071c61d4d21dd158940/ansible_core-2.15.2-py3-none-any.whl.metadata
...(略)...
Installing collected packages: resolvelib, PyYAML, pycparser, packaging, MarkupSafe, jinja2, cffi, cryptography, ansible-core
Successfully installed MarkupSafe-2.1.3 PyYAML-6.0.1 ansible-core-2.15.2 cffi-1.15.1 cryptography-41.0.2 jinja2-3.1.2 packaging-23.1 pycparser-2.21 resolvelib-1.0.1
%

インストールされたパッケージを含めて表示すると、たしかに、インストール予定とされていたパッケージたちがインストールされていました。

 % pip list
Package      Version
------------ -------
ansible-core 2.15.2
cffi         1.15.1
cryptography 41.0.2
Jinja2       3.1.2
MarkupSafe   2.1.3
packaging    23.1
pip          23.2.1
pycparser    2.21
PyYAML       6.0.1
resolvelib   1.0.1
setuptools   67.6.1

おわりに

これまで、アップデート可能なバージョンの pip を使ってると促される [notice] To update, run: pip install --upgrade pip の表示を抑制する作法として pip のバージョンアップをしてきましたが、今回のような改善を知ってアップデートするモチベーションが高まりました。