要件ファイルにリストされているパッケージの依存関係をインストールするように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がすべての依存関係をインストールしていないことについて疑問がある人にはこの質問をさせます。
質問に対するコメント(単一パッケージのインストールの実行は期待どおりに機能すると言う)があれば、要件ファイルをループすることをお勧めします。 bashの場合:
#!/bin/sh
while read p; do
pip install $p
done < requirements.pip
HTH!
簡単に使用します:
pip install -r requirement.txt
要件ファイルにリストされているすべてをインストールできます。
パッケージを新しい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