キャッシング

バージョン6.0で追加。

pipは、重複するダウンロードやビルドに費やす時間を減らすように設計された、デフォルトで有効なキャッシングを提供します。

キャッシュされるもの

HTTPレスポンス

このキャッシュは、Webブラウザのキャッシュのように機能します。

HTTPリクエストを行う際、pipはまずローカルキャッシュをチェックして、そのリクエストに対して期限切れになっていない適切な応答が保存されているかどうかを判断します。保存されている場合は、その応答を返し、コンテンツを再ダウンロードしません。

応答が保存されているが期限切れになっている場合は、条件付きリクエストを試行してキャッシュを更新します。これにより、キャッシュされたアイテムを使用するようpipに指示する空の応答(および有効期限タイマーを更新)が返されるか、pipがキャッシュに保存できるまったく新しい応答が返されます。

このキャッシュはネットワークアクティビティを最小限に抑えるように試みますが、ネットワークアクセスを完全に防止するわけではありません。PyPIへのアクセスを回避するローカルインストールソリューションが必要な場合は、ローカルパッケージからのインストールを参照してください。

バージョン23.3で変更: 新しいキャッシュ形式が使用されるようになり、http-v2というディレクトリに保存されます(このディレクトリの場所については下記を参照)。以前は、このキャッシュはメインキャッシュディレクトリのhttpというディレクトリに保存されていました。pipの新しいバージョンに完全に切り替えた場合は、古いディレクトリを削除することをお勧めします。

ローカルでビルドされたwheel

pipは可能な限りローカルのwheelキャッシュからwheelを使用しようとします。

これは、特定のパッケージ名の同じバージョンのキャッシュされたwheelがある場合、pipはそのwheelを使用してプロジェクトを再構築する代わりに、そのwheelを使用することを意味します。

ソース配布にwheelが見つからない場合、pipはパッケージのビルドシステムを使用してwheelをビルドしようとします。ビルドが成功した場合、このwheelはキャッシュに追加され、同じパッケージバージョンの後続のインストールで使用されます。

直接パスとしてpipに提供されたソース配布からビルドされたwheel(pip install .など)は、実行をまたいでキャッシュされませんが、同じpipの実行内で再利用される場合があります。

バージョン20.0で変更: pipは、イミュータブルなGit参照(つまり、コミットハッシュ)からビルドするときにwheelをキャッシュするようになりました。

キャッシュの保存場所

注意

pipのキャッシュの内容の正確なファイルシステム構造は、実装の詳細と見なされ、pipの2つのバージョン間で変更される可能性があります。

pip cache dir

バージョン20.1で追加。

pip cache dirを使用して、pipが現在使用するように構成されているキャッシュディレクトリを取得できます。

デフォルトパス

~/.cache/pip

pipはXDG_CACHE_HOMEも尊重します。

~/Library/Caches/pip
%LocalAppData%\pip\Cache

キャッシングの回避

pipは可能な限りキャッシュを使用しようとし、デフォルトで正しい動作をするように設計されています。

場合によっては、pipのキャッシュ動作が望ましくない場合があります。例として、オプションのC拡張機能を持つパッケージがあり、C拡張機能をビルドできない場合にピュアPythonのwheelを生成する場合、後でオプションのC拡張機能をビルドできた環境から呼び出した場合でも、pipはそのキャッシュされたwheelを使用します。これは、pipがビルド中のパッケージに一致するキャッシュされたwheelを確認しており、パッケージインデックスからパッケージをビルドした結果は決定論的であるとpipが想定しているためです。

これらの状況に対処するための推奨されるアプローチは、pipがインストールしようとするときにパッケージを自動的に検出させるのではなく、ソース配布から直接インストールすることです。ソース配布から直接インストールすると、pipは一致するキャッシュされたwheelがあるかどうかに関係なく、wheelをビルドします。これは通常、次のような操作を行うことを意味します。

$ python -m pip download sampleproject==1.0.0 --no-binary :all:
$ python -m pip install sampleproject-1.0.0.tar.gz
$ python -m pip download sampleproject==1.0.0 --no-binary :all:
$ python -m pip install sampleproject-1.0.0.tar.gz
C:> py -m pip download sampleproject==1.0.0 --no-binary :all:
C:> py -m pip install sampleproject-1.0.0.tar.gz

pip cacheコマンドを使用して、問題のあるキャッシュされたwheelを削除することも良い考えです。

キャッシュ管理

pip cacheコマンドを使用して、pipのキャッシュを管理できます。

一般的な概要

pip cache infoは、pipのキャッシュの内容の概要(合計サイズやさまざまな部分の場所など)を提供します。

単一パッケージの削除

pip cache remove setuptoolsは、pipのキャッシュからsetuptoolsに関連するすべてのwheelファイルを削除します。HTTPキャッシュファイルはこの時点では削除されません。

キャッシュの削除

pip cache purgeは、pipのwheelおよびHTTPキャッシュからすべてのファイルをクリアします。

キャッシュされたファイルのリスト

pip cache listは、pipのキャッシュからすべてのwheelファイルをリストします。

pip cache list setuptoolsは、pipのキャッシュからsetuptoolsに関連するすべてのwheelファイルをリストします。

キャッシングの無効化

pipのキャッシング動作は、--no-cache-dirオプションを渡すことで無効になります。

ただし、(コンテナビルドのレイヤー化されたキャッシュなど)より高いレベルでキャッシングを行っている場合を除き、pipのキャッシングを無効にしないことをお勧めします。そうすると、pipが大幅に遅くなり(繰り返しの操作とパッケージビルドのため)、ネットワーク使用量が大幅に増加する可能性があります。