2016-08-19 11 views
3

requirements.txtとvirtualenv環境を指定した場合、からをチェックして、要件が満たされているかどうかを確認し、不一致の場合に詳細を提供する最良の方法はありますか?要件ファイルと実際にインストールされたPythonモジュールを比較するには?

Pipはメジャーリリースの内部APIを変更しているため、使用しないようにアドバイスを見たのはparse_requirementsメソッドです。

pkg_resources.require(dependencies)の方法がありますが、どのように要求ファイルをgithubリンクなどのようにすべての方法で解析するのですか?

これはかなりシンプルなはずですが、ポインタが見つかりません。

更新:プログラムによる解決策が必要です。

+0

pipを使用してこれらの要件をインストールできる場合は、それらをすべてインストールしようとする可能性があります。ユーザーが既にそれらをインストールしている場合、「要件は既に​​満たされました」というメッセージが表示され、また、try-except文で欠けている依存関係をキャッチすることもできます。見つからない場合は、インストールするかどうかをユーザーに確認することもできます。 – coder

答えて

3

あなたは次にあなたがthisようなスクリプトを使用してdifflibとrequirements.txtし、これを比較することができcurrent.txt

pip freeze > current.txt 

を言って、ファイルにpip freezeであなたにvirtualenvの現在インストールされたパッケージを保存することができます:

import difflib 

req = open('requirements.txt') 
current = open('current.txt') 

diff = difflib.ndiff(req.readlines(), current.readlines()) 
delta = ''.join([x for x in diff if x.startswith('-')]) 

print(delta) 

これは 'requirements.txt'にある 'current.txt'にないパッケージのみを表示します。

+1

これは非常に騒々しい方法です:指定子は適切に比較されず、変更として報告されます(例:> = 8.2と== 8.2が報告されているので違反はありません)。また、問題がない場合には、人間には必要ないはずです(私は質問に太字で示し、さらに明確にするために更新を追加しました)。 –

+3

また、答えに満足できる人のヒント: 'pip freeze -r requirements.txt> current.txt'を使って注文を保存してください。いくつかの大文字と小文字の不一致も報告します。 –

関連する問題