9

から仮想環境を頻繁に再作成する必要があり、requirements.txtすでに を使用してい$PIP_DOWNLOAD_CACHEます。まだ時間がかかりますが、次のことに気付きました。

Pip は、次の 2 行の間に多くの時間を費やします。

Downloading/unpacking SomePackage==1.4 (from -r requirements.txt (line 2))
  Using download cache from $HOME/.pip_download_cache/cached_package.tar.gz

キャッシュされたパッケージを使用するかどうかを決定するのに平均で約 20 秒かかるため、インストールは高速です。これは、何十ものパッケージをインストールしなければならないときの多くの時間です (実際には、この質問を書くのに十分です)。

バックグラウンドで何が起こっているのですか?それらは、オンライン パッケージに対するある種の整合性チェックですか?

これをスピードアップする方法はありますか?

編集:見て:

time pip install -v Django==1.4

私は得る:

real    1m16.120s
user    0m4.312s
sys     0m1.280s

完全な出力はhttp://pastebin.com/e4Q2B5BAにあります。http://pypi.python.org/packages/source/D/Django/Django-1.4.tar.gzの有効なキャッシュが既にあるにもかかわらず、pip は有効なダウンロード リンクを探すのに時間を費やしているようです。

最初にキャッシュを探して、バージョンが一致する場合はそこで停止する方法はありますか?

4

2 に答える 2

8

pipの内部を調査し、いくつかのパッケージのインストールのプロファイルを作成するために時間を費やした後、ダウンロードキャッシュを使用しても、pipはパッケージごとに次のことを行うという結論に達しました。

  • メインのインデックスURL、通常はhttp://pypi.python.org/simple/ /()に移動します
  • すべてのリンクをたどって、追加のWebページを取得します
  • それらすべてのページからすべてのリンクを抽出します
  • パッケージ名とバージョン要件に対してすべてのリンクの有効性をチェックします
  • 有効なリンクから最新バージョンを選択します

これで、pipにダウンロードURLがあり、構成されている場合はダウンロードキャッシュフォルダーをチェックし、URLにちなんで名付けられたローカルファイルが存在する場合は、最終的にこのURLを使用しないことを決定します。

私の推測では、キャッシュを事前にチェックすることで多くの時間を節約できますが、必要な変更を開始するためのすべてのpipコードベースを十分に理解していません。もちろん、正確なバージョン番号の要件のみが対象となります。これは、や==などの他の制約がある>=場合>でも、最新バージョンを探してWebをクロールする必要があるためです。

それでも、小さなプルリクエストを行うことができたので、マージすると時間を節約できます。

于 2012-09-14T19:39:24.897 に答える
3

1 つの代替手段として、virtualenv の再構築を回避し、代わりに、必要に応じて更新およびコピーできるマスター仮想環境のコピーを取得することが考えられます。

virtualenvwrapperは、 cpvirtualenvコマンドでこれを行うためのサポートを提供します

于 2012-09-15T10:36:17.413 に答える