web-dev-qa-db-ja.com

pipを使用してローカルキャッシュからインストールするにはどうすればよいですか?

同じパッケージをたくさん virtualenv 環境にインストールします。パッケージを一度ダウンロードしてから、ローカルキャッシュから pip をインストールする方法はありますか?

これにより、ダウンロードの帯域幅と時間が削減されます。

137
Matthew Rankin

更新された回答19-Nov-15

Pipドキュメント によると:

V6.0以降、pipはデフォルトでオンになり、Webブラウザーのキャッシュと同様に機能します。キャッシュはデフォルトでオンになっており、デフォルトで正しいことを行うように設計されていますが、キャッシュを無効にし、--no-cache-dirオプションを使用して常にPyPIにアクセスできます。

したがって、更新された答えは、ダウンロードキャッシュが必要な場合、デフォルトでpipを使用することです。

元の回答

pip news 、バージョン0.1.4から:

パッケージのダウンロードをキャッシュする環境変数$ PIP_DOWNLOAD_CACHEのサポートを追加しました。これにより、今後のインストールで大量のダウンロードが不要になります。ネットワークアクセスは引き続き必要ですが、これを使用する場合、一部のダウンロードのみが回避されます。

これを利用するために、以下を~/.bash_profileに追加しました:

export PIP_DOWNLOAD_CACHE=$HOME/.pip_download_cache

または、Macを使用している場合:

export PIP_DOWNLOAD_CACHE=$HOME/Library/Caches/pip-downloads

ノート

  1. パッケージの新しいバージョンが検出されると、ダウンロードされてPIP_DOWNLOAD_CACHEディレクトリに追加されます。たとえば、今ではかなりの数のDjangoパッケージがあります。
  2. pip news で述べられているように、これはネットワークアクセスの必要性を除去しません。したがって、飛行機で新しいvirtualenvsを作成するための答えではありませんが、それでも素晴らしいです。
122
Matthew Rankin

私の意見では、 pip2pi は、この問題に対するよりエレガントで信頼性の高いソリューションです。

ドキュメントから:

pip2piは、pip要件からPyPI互換パッケージリポジトリを構築します

pip2piを使用すると、2つの簡単なコマンドを使用して独自のPyPIインデックスを作成できます。

  1. パッケージとそのすべての要件をミラーリングするには、pip2tgzを使用します。

    $ cd /tmp/; mkdir package/
    $ pip2tgz packages/ httpie==0.2
    ...
    $ ls packages/
    Pygments-1.5.tar.gz
    httpie-0.2.0.tar.gz
    requests-0.14.0.tar.gz
    
  2. 前のディレクトリからパッケージインデックスを作成するには:

    $ ls packages/
    bar-0.8.tar.gz
    baz-0.3.tar.gz
    foo-1.2.tar.gz
    $ dir2pi packages/
    $ find packages/
    /httpie-0.2.0.tar.gz
    /Pygments-1.5.tar.gz
    /requests-0.14.0.tar.gz
    /simple
    /simple/httpie
    /simple/httpie/httpie-0.2.0.tar.gz
    /simple/Pygments
    /simple/Pygments/Pygments-1.5.tar.gz
    /simple/requests
    /simple/requests/requests-0.14.0.tar.gz
    
  3. 手順2で作成したインデックスからインストールするには、次を使用できます。

    pip install --index-url=file:///tmp/packages/simple/ httpie==0.2
    

pip2piを使用して、独自のインデックスをリモートホストにミラー化することもできます。

51
K Z

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

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

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

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

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

[global]
download_cache = ~/.cache/pip

OS Xでは、他のOS Xプログラムが使用する規則に従っているため、選択するのに適したパスは~/Library/Caches/pipです。

31
Flimm

PIP_DOWNLOAD_CACHEにはいくつかの重大な問題があります。最も重要なことは、ダウンロードのホスト名をキャッシュにエンコードするため、ミラーの使用が不可能になることです。

Pipダウンロードのキャッシュを管理するより良い方法は、「パッケージのダウンロード」ステップを「パッケージのインストール」ステップから分離することです。ダウンロードしたファイルは一般に「sdistファイル」(ソース配布)と呼ばれ、$ SDIST_CACHEディレクトリに保存します。

2つのステップは次のようになります。

pip install --no-install --use-mirrors -I --download=$SDIST_CACHE <package name>

パッケージがダウンロードされ、$ SDIST_CACHEが指すディレクトリに配置されます。パッケージはインストールされません。そして、あなたは実行します:

pip install --find-links=file://$SDIST_CACHE --no-index --index-url=file:///dev/null <package name> 

パッケージを仮想環境にインストールするには。理想的には、$ SDIST_CACHEはソース管理下でコミットされます。実稼働環境にデプロイする場合、2番目のpipコマンドのみを実行して、パッケージをダウンロードせずにインストールします。

28
slacy

バージョン6. 以降、pipは独自のキャッシングを行います:

  • [〜#〜] deprecation [〜#〜]pip install --download-cacheおよびpip wheel --download-cacheコマンドラインフラグは廃止され、機能が削除されました。 pipは--download-cacheに取って代わる内部HTTPキャッシュを自動的に構成および使用するようになったため、既存のオプションは機能しなくなりましたが、pip v8.0で削除されるまで受け入れられます。詳細については、 https://pip.pypa.io/en/latest/reference/pip_install.html#caching を参照してください。

リンク上 からの詳細情報:

V6.0以降、pipはデフォルトでonを提供します。これはWebブラウザーのキャッシュと同様に機能します。キャッシュはデフォルトでオンになっており、デフォルトで正しいことを行うように設計されていますが、キャッシュを無効にし、--no-cache-dirオプションを使用して常にPyPIにアクセスできます。

13
Jace Browning

pip wheel は、パッケージをプリコンパイルするという追加機能を使用して、必要なことを行う優れたオプションです。 公式ドキュメント から:

要件(およびそのすべての依存関係)のホイールを構築します。

$ pip wheel --wheel-dir=/tmp/wheelhouse SomePackage

/tmp/wheelhouseディレクトリにはすべての依存関係がプリコンパイルされているため、フォルダーを別のサーバーにコピーし、次のコマンドですべてをインストールできます。

$ pip install --no-index --find-links=/tmp/wheelhouse SomePackage

すべてのパッケージがマシン間で完全に移植できるわけではないことに注意してください。一部のパッケージは、Pythonバージョン、OSディストリビューション、および/または使用しているハードウェアアーキテクチャ用に特別にビルドされます。これは、CPythonの-cp27-none-linux_x86_64のように2.7 64ビットLinuxなど。

8
hdiogenes

Pipのみ(私のバージョンは1.2.1)を使用して、次のようにローカルリポジトリを構築することもできます。

if ! pip install --find-links="file://$PIP_SDIST_INDEX" --no-index <package>; then
    pip install --download-directory="$PIP_SDIST_INDEX" <package>
    pip install --find-links="file://$PIP_SDIST_INDEX" --no-index <package>
fi

Pipの最初の呼び出しでは、要件ファイルのパッケージがローカルリポジトリ(のみ)で検索され、そこからインストールされます。それが失敗した場合、pipは通常の場所(PyPIなど)からパッケージを取得し、PIP_SDIST_INDEXにダウンロードします(ただし、何もインストールしません!)。最初の呼び出しは、ローカルインデックスからパッケージを適切にインストールするための「繰り返し」です。

--download-cacheは完全な(エスケープされた)URLであるローカルファイル名を作成し、pipはこれを--find-linksのインデックスとして使用できません。--download-cacheは、キャッシュファイルが見つかった場合はそれを使用します。インデックスは既に一種のキャッシュとして機能しているため、必ずしも多くをもたらすとは限りません。たとえば、インデックスが空になっている場合に役立ちます。

3
user1010997

より単純なオプションは basket です。

パッケージ名を指定すると、それとすべての依存関係が中央の場所にダウンロードされます。 pipキャッシュの欠点はありません。これはオフラインでの使用に最適です。

その後、このディレクトリをpipのソースとして使用できます。

pip install --no-index -f file:///path/to/basket package

または easy_install

easy_install -f ~/path/to/basket -H None package

また、オンラインのときにバスケットを更新するために使用することもできます。

2
Burhan Khalid

これには、 pip-accel と呼ばれる新しいソリューションがあります。これは、キャッシュが組み込まれたpipのドロップイン置換です。

Pip-accelプログラムは、Pythonパッケージマネージャーであるpipのラッパーです。 1つ以上の要件ファイルを指定して、Python仮想環境を初期化するためにpipの使用を高速化します。これは、次の2つのアプローチを組み合わせることで実現します。

  • ソース配布のダウンロードはキャッシュされ、ソース配布アーカイブのローカルインデックスを生成するために使用されます。

  • バイナリ配布は、バイナリコンポーネント(M2CryptoやLXMLなど)を使用して依存関係をインストールするプロセスを高速化するために使用されます。すべての仮想環境でこれらの依存関係を再コンパイルする代わりに、それらを一度コンパイルし、結果をバイナリ* .tar.gzディストリビューションとしてキャッシュします。

Paylogicはpip-accelを使用して、常に単体テストを実行している連続統合スレーブのファームの仮想環境を迅速かつ確実に初期化します(これはpip-accelが開発された元のユースケースの1つでした)。ビルドサーバーでも使用します。

pipからpip-accelへの切り替えにより、約10倍の速度向上が見られました。

2
qris

パッケージ「pip-accel」は良い選択に違いないと思います。

0
lasthuman