60

Django Webアプリを開発しているときに、virtualenvにインストールする必要のあるパッケージのリストがあります。言う:

Django==1.3.1
--extra-index-url=http://dist.pinaxproject.com/dev/
Pinax==0.9b1.dev10
git+git://github.com/pinax/pinax-theme-bootstrap.git@cff4f5bbe9f87f0c67ee9ada9aa8ae82978f9890
# and other packages

最初は、開発に沿って1つずつ手動でインストールしました。これにより、必要な依存関係がインストールされpip freeze、アプリをデプロイする前に最終的に使用しました。

問題は、いくつかのパッケージをアップグレードしたため、一部の依存関係は使用も不要にもなりましたが、によってリストされ続けていることpip freezeです。

ここで、次のように新しいvirtualenvを設定したいと思います。

  • 必要なパッケージ(依存関係なし)を次の
    ような要件ファイルに入れますmanual-requirements.txt
  • それらを依存関係とともにインストールします
    pip install -r manual-requirement.txt(←問題、これは依存関係をインストールしません)
  • 完全なvirtualenv
    pip freeze -r manual-requirements.txt > full-requirements.txt
    をフリーズしてデプロイします。

依存関係を取得するために新しいvirtualenvにパッケージを手動で再インストールせずにこれを行う方法はありますか?これはエラーが発生しやすいので、不要になった古い依存関係からvirtualenvをクリーンアップするプロセスを自動化したいと思います。

編集:実際には、ドキュメントにそのようなファイルがフラットであると記載されている場合でも、pip要件ファイルに明示的にリストされていない依存関係をインストールします。インストールする予定の依存関係について間違っていました。pipがすべての依存関係をインストールしていないことに疑問がある場合は、この質問をします。

4

5 に答える 5

65

単に使用してください:

pip install -r requirements.txt

これにより、requirements.txtファイルにリストされているすべての依存関係がインストールされます。

于 2013-01-06T12:35:37.063 に答える
32

依存関係を取得するために新しいvirtualenvにパッケージを手動で再インストールせずにこれを行う方法はありますか?これはエラーが発生しやすいので、不要になった古い依存関係からvirtualenvをクリーンアップするプロセスを自動化したいと思います。

それがpip-toolsパッケージの目的です(https://github.com/jazzband/pip-toolsから):

インストール

$ pip install --upgrade pip  # pip-tools needs pip==6.1 or higher (!)
$ pip install pip-tools

pip-compileの使用例

Flaskプロジェクトがあり、本番用に固定したいとします。次の行をファイルに書き込みます。

# requirements.in
Flask

次に、pip-compilerequirements.inを実行します。

$ pip-compile requirements.in
#
# This file is autogenerated by pip-compile
# Make changes in requirements.in, then run this to update:
#
#    pip-compile requirements.in
#
flask==0.10.1
itsdangerous==0.24        # via flask
jinja2==2.7.3             # via flask
markupsafe==0.23          # via jinja2
werkzeug==0.10.4          # via flask

そしてrequirements.txt、すべてのFlask依存関係(およびすべての基礎となる依存関係)が固定された、を生成します。このファイルもバージョン管理下に置き、定期的に再実行pip-compileしてパッケージを更新します。

pip-syncの使用例

これで、ができたので、仮想環境を更新して、そこにあるものを正確に反映するrequirements.txtことができます。注:これにより、内容pip-syncに一致するために必要なすべてのものがインストール/アップグレード/アンインストールされます。requirements.txt

$ pip-sync
Uninstalling flake8-2.4.1:
  Successfully uninstalled flake8-2.4.1
Collecting click==4.1
  Downloading click-4.1-py2.py3-none-any.whl (62kB)
    100% |████████████████████████████████| 65kB 1.8MB/s
  Found existing installation: click 4.0
    Uninstalling click-4.0:
      Successfully uninstalled click-4.0
Successfully installed click-4.1
于 2016-02-15T14:03:03.163 に答える
25

質問へのコメント(単一のパッケージに対してインストールを実行すると期待どおりに機能すると言う場合)を考えると、要件ファイルをループすることをお勧めします。bashで:

#!/bin/sh
while read p; do
  pip install $p
done < requirements.pip

HTH!

于 2012-04-26T14:11:41.897 に答える
5

Piotrの答えを拡張して、何を入れるかを理解する方法も必要な場合はrequirements.in、最初に使用pip-chillして、必要なパッケージの最小限のセットを見つけることができます。これらのツールを組み合わせることで、各パッケージがインストールされる依存関係の理由を示すことができます。完全なサイクルは次のようになります。

  1. 仮想環境を作成します。
    $ python3 -m venv venv
  2. それをアクティブにします:
    $ . venv/bin/activate
  3. 最新バージョンのpip、pip-tools、pip-chillをインストールします。
    (venv)$ pip install --upgrade pip
    (venv)$ pip install pip-tools pip-chill
  4. 保存するまで、プロジェクトをビルドしたり、pipパッケージを追加インストールしたりします...
  5. パッケージの最小限のセットを抽出します(つまり、依存関係のないトップレベル):
    (venv)$ pip-chill --no-version > requirements.in
  6. 必要なすべてのパッケージのリストをコンパイルします(依存関係の理由を示します):
    (venv)$ pip-compile requirements.in
  7. 現在のインストールがリストと同期していることを確認してください。
    (venv)$ pip-sync
于 2019-10-09T14:03:05.493 に答える
2

@Mingが述べたように:

pip install -r file.txt

すべての依存関係を強制的に更新する簡単な行は次のとおりです。

while read -r package; do pip install --upgrade --force-reinstall $package;done < pipfreeze.txt

また

pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1  | xargs -n1 pip install -U
于 2020-08-13T08:26:29.353 に答える