web-dev-qa-db-ja.com

ダウンロードしたPIPパッケージをキャッシュする方法

PIPが以前にダウンロードしたパッケージを再ダウンロードしないようにするにはどうすればよいですか?いくつかのディストリビューション固有のパッケージに依存する11MBパッケージであるmatplotlibのインストールをテストしています。実行するたびにpip install matplotlib、matplotlibを再ダウンロードします。これを止めるにはどうすればいいですか?

60
Cerin

特定の環境変数PIP_DOWNLOAD_CACHEを使用して、パッケージが保存されるディレクトリを指すようにすることができます。再インストールする場合は、このディレクトリから取得されます。

PIPの追加オプションもあるようですpip --download-cacheこれは似たようなことをするはずですが、私は自分で試したことはありません。たとえば、毎回matplotlibを再ダウンロードしないようにするには、次を実行します。

pip install --download-cache /path/to/pip/cache matplotlib

それはあなたの質問に答えますか?

56
Charles Menguy

新しいPipバージョンの場合:

新しいPipバージョンはデフォルトでダウンロードをキャッシュします。このドキュメントを参照してください:

https://pip.pypa.io/en/stable/reference/pip_install/#caching

古いPipバージョンの場合:

~/.pip/pip.confという名前の構成ファイルを作成し、次の内容を追加します。

[global]
download_cache = ~/.cache/pip

1つのコマンドで:

printf '[global]\ndownload_cache = ~/.cache/pip\n' >> ~/.pip/pip.conf
110
Flimm

あなたは出来る

# download and extract package to build path
pip install --no-install matplotlib

# the build path could be found by 
pip install --help|grep Unpack\ packages\ into -A 2

# then rm pip-delete-this-directory.txt inside the build path
# this prevent pip from removing package from the build directory after install
# you could check the content of the file
rm build/pip-delete-this-directory.txt

# from now on you could install matplotlib quickly
# this uses single build directory 
# and can speed up compiling by caching intermediate objects.
pip install --no-download matplotlib

また、パッケージを手動でダウンロードすることもできます

pip install -d dir_for_packages matplotlib

その後、un-tarでインストールし、後でpython setup installをインストールします。

pip install --download-cacheは同様の方法で機能し、追加のチェックを行います。最初にWebからターゲットパッケージの最新バージョンまたは指定バージョンを検索します。検索結果があり、download-cacheで指定されたディレクトリにキャッシュパッケージがある場合、キャッシュパッケージはダウンロードする代わりに使用します。例えば、

pip install --download-cache . pymongo

pymongoパッケージを現在のディレクトリにダウンロードします。

http%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2Fp%2Fpymongo%2Fpymongo-2.1.1.tar.gz
http%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2Fp%2Fpymongo%2Fpymongo-2.1.1.tar.gz.content-type
8
okm