web-dev-qa-db-ja.com

要件ファイルにリストされているパッケージの依存関係をインストールするようにpipに指示します

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を削除するプロセスを自動化したいと思います。

edit:実際、pipdoes要件ファイルに明示的にリストされていない依存関係をインストールします- ドキュメント は、そのようなファイルがフラットであることを示しています。どの依存関係がインストールされると予想していたかが間違っていました。私は、pipがすべての依存関係をインストールしていないことについて疑問がある人にはこの質問をさせます。

45
Maxime R.

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

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

HTH!

15
mac

簡単に使用します:

pip install -r requirement.txt

要件ファイルにリストされているすべてをインストールできます。

50
Ming

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

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

Installation

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

Pip-compileの使用例

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

# requirements.in
Flask

次に、pip-compile requirements.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

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

Pip-syncの使用例

requirements.txtができたので、pip-syncを使用して仮想envを更新し、そこにある内容を正確に反映できます。注:これにより、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
26
Piotr Dobrogost