9

キャッシュされたパッケージを使用して pip パッケージを virtualenv にインストールする適切な方法は何ですか? と を設定--timeout=360してみまし--use-mirrorsたが、pypi のパフォーマンスが非常に不安定で、定期的にハングしたり切断したりして、デプロイが面倒です。

したがって、私の計画では、 --download-cache オプションを使用して、すべてのパッケージ アーカイブを事前にダウンロードする (ただし、インストールはしない) ことでした。たとえば、次のようになります。

pip install --upgrade --timeout=120 --use-mirrors --no-install --download-cache /usr/local/pip/cache -r pip-requirements.txt

次に、インストール中にこのキャッシュの場所を virtualenv に指定します。

virtualenv /usr/local/myapp/.env
. /usr/local/myapp/.env/bin/activate; pip install --no-download --download-cache /usr/local/pip/cache -r pip-requirements.txt
deactivate

pip はダウンロードしたパッケージを非決定論的にキャッシュディレクトリに保存するように見えるため、キャッシュの作成は非常にイライラしました。Django==1.4.0具体的には、 「その要件はすでに満たされている」と言ってキャッシュを拒否したため、 --force-reinstall.

キャッシュを使用したインストールは、現在私が立ち往生しているところです。上記のコマンドを実行すると、次のエラーが表示されます。

Could not install requirement Django==1.4.0 (from -r pip-requirements.txt (line 1)) because source folder /usr/local/myapp/.env/build/Django does not exist (perhaps --no-download was used without first running an equivalent install with --no-install?)
Storing complete log in /home/chris/.pip/pip.log

これは何を意味するのでしょうか?

ファイル:

http%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2FD%2FDjango%2FDjango-1.4.tar.gz
http%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2FD%2FDjango%2FDjango-1.4.tar.gz.content-type

キャッシュディレクトリに確実に存在し、--no-installオプションを使用しました。

私は何を間違っていますか?

4

1 に答える 1

18

問題は--download-cache、インストールではなく、ダウンロード用のキャッシュを指定するためにのみ使用できることです。したがって、の代わりにpipまだ見てい ます。動かしてみましたか/usr/local/myapp/.env/build/Django/usr/local/pip/cache

pip install --upgrade --timeout=120 --use-mirrors --no-install --download-cache /usr/local/pip/cache -r pip-requirements.txt

virtualenv?の作成後に それが役立つかどうか疑問に思います。

を使用せずにエクスポートPIP_DOWNLOAD_CACHEして動作するかどうかを確認することもでき--download-cacheます。

これが私が見つけたものです:

pip install --no-install --use-mirrors --download=/DIRNAME PKGNAME
pip install --find-links=file:///DIRNAME --no-index --index-url=file:///dev/null PKGNAME

さて、実際には、上記のすべての代わりに使用するツールがあり、すべての問題をよりエレガントかつ確実に解決します: David Woleverによる pip2pi。

ドキュメントから:

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

pip2pi2 つの簡単なコマンドを使用して、独自の 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

于 2012-09-21T06:21:09.247 に答える