web-dev-qa-db-ja.com

要件が最新かどうかを確認する

私はpiprequirements files を使用して、依存関係リストを保持しています。

また、依存関係を管理するためのベストプラクティスに従い、要件ファイル内に正確なパッケージバージョンを提供するようにします。例えば:

Django==1.5.1
lxml==3.0

質問は:Python Package Index requirements.txt内にリストされているパッケージの場合

この特定の例では、現在利用可能な最新のバージョンは、Djangoおよびlxmlに対してそれぞれ1.6.2および3.3.4です。

pip install --upgrade -r requirements.txtを試しましたが、すべてが最新であると書かれています:

$ pip install --upgrade -r requirements.txt 
Requirement already up-to-date: Django==1.5.1 ...

この時点では、実際のアップグレードを実行したくないことに注意してください-利用可能な更新があるかどうかを確認したいだけです。

47
alecxe

Pipにはこの機能が組み込まれています。あなたがvirtualenvタイプの中にいると仮定すると:

$ pip list --outdated
psycopg2 (Current: 2.5.1 Latest: 2.5.2)
requests (Current: 2.2.0 Latest: 2.2.1)

$ pip install -U psycopg2 requests

その後、psycopg2の新しいバージョンとリクエストがダウンロードされ、インストールされます。次に:

$ pip freeze > requirements.txt

これで完了です。これは1つのコマンドではありませんが、外部の依存関係が必要ないという利点があります。

92
Max Tepkeev

pythonタスク専用のパッケージ- piprot 、次のスローガンを見つけました:

How rotten are your requirements?

以下を使用するのは非常に簡単です。

$ piprot requirements.txt 
Django (1.5.1) is 315 days out of date. Latest is 1.6.2
lxml (3.0) is 542 days out of date. Latest is 3.3.4
Your requirements are 857 days out of date

また、「パイプ」することができますpip freezeからpiprotコマンドを使用して、サンドボックス/仮想環境にインストールされているパッケージの腐敗度を実際に検査できます。

pip freeze | piprot

それが将来誰かを助けることを願っています。

31
alecxe

あなたはベストプラクティスに従うのが好きだと言ったので、私もあなたがvirtualenvを使用していると推測しています、正しいですか?そうであると仮定し、すでに pinning パッケージであるため、 pip-tools というツールがあり、virtualenvに対して実行して更新を確認できます。

欠点がありますが、なぜvirtualenvの使用に言及したのでしょうか。

[ツール] PyPIをチェックし、利用可能な更新を報告します。現在インストールされているパッケージのリストを使用して更新を確認しますrequirements.txtは使用しません

Virtualenvで実行すると、現在のアクティブな環境で利用可能な更新があるパッケージを簡単に確認できます。ただし、virtualenvを使用していない場合は、他のプロジェクトが異なるバージョンに依存している可能性があるため(または、すべてが現在動作している場合でも更新されたバージョンではうまく動作しない可能性があるため)、システムに対して実行するのはおそらく最善ではありません。

提供されているドキュメントから、使用方法は簡単です。 _pip-review_は、利用可能なアップデートを示しますが、インストールはしません。

_$ pip-review
requests==0.13.4 available (you have 0.13.2)
redis==2.4.13 available (you have 2.4.9)
rq==0.3.2 available (you have 0.3.0)
_

自動的にインストールする場合も、ツールで処理できます:_$ pip-review --auto_。パッケージを選択的に更新するために使用できる_--interactive_スイッチもあります。

これがすべて完了すると、_pip-tools_は、requirements.txtを最新バージョンで更新する方法を提供します:_pip-dump_。繰り返しますが、これは現在アクティブな環境に対して実行されるため、virtualenv内で使用することをお勧めします。

プロジェクトのインストールは、_pip install pip-tools_を介して実行できます。

著者注:小さなDjangoプロジェクトにこれを使用し、非常に満足しています。ただし、_pip-tools_を仮想環境にインストールすると、_pip-dump_は、requirements.txtファイルに追加されることがわかります。私のプロジェクトは小さいので、常に手動でその行を削除しました。何らかのビルドスクリプトがある場合は、自動的に展開する前に削除します。

9
Andy

Env(仮想または非仮想)で次のような操作を行うだけです:

pip freeze | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'
5
Rico