一部のPythonパッケージでは、依存関係として2つのパッケージのいずれかが必要です。たとえば、Ghost.py
には、PySide
またはPyQt4
が必要です。要件ファイルに2つの依存関係のうちの1つだけを要求する
このような依存関係をrequirements.txt
ファイルに含めることは可能ですか?これらのファイルで動作する 'or'演算子はありますか?
これらの要件をファイルに追加すると、そのうちの1つだけがインストールされます。
一部のPythonパッケージでは、依存関係として2つのパッケージのいずれかが必要です。たとえば、Ghost.py
には、PySide
またはPyQt4
が必要です。要件ファイルに2つの依存関係のうちの1つだけを要求する
このような依存関係をrequirements.txt
ファイルに含めることは可能ですか?これらのファイルで動作する 'or'演算子はありますか?
これらの要件をファイルに追加すると、そのうちの1つだけがインストールされます。
現在、pipのrequirement.txt
もsetuptoolsも直接このような構成を許可していません。両方とも、要件のリストを指定する必要があります。要件のバージョンを制限することはできますが、それだけです。次のように
インサイドPythonは、あなたがこのような状況に対処することができます
try:
import dependency1
def do_it(x):
return dependency1.some_function(x)
except ImportError:
try:
import dependency2
def do_it(x)
return dependency2.another_function(x)
except ImportError:
raise ImportError('You must install either dependency1 or '
+ 'dependecy2!')
は今do_it
はどちらかdependency1.some_function
またはdependency2.another_function
使用し、これに応じて利用可能です。
それでも、要件を指定する方法の問題が残されます。
requirements.txt
またはsetup.py
が、文書内の要件を指定しないでください:私は2つのオプションを参照してください。この方法は、ソフトウェアの設定で追加の手動ステップが必要な場合(つまり、pip install my_tool
以上の場合)は問題ありません。requirements.txt
またはsetup.py
に希望の要件をハードコードします。最後に、なぜ人々が他の依存関係を使用したいのかを尋ねる必要があります。私は通常、(ディスク)スペースがあるため、私が使用するライブラリの依存性についてはあまり気にしませんでした。安価であり(virtualenvのため)、互換性のリスクはほとんどありません。したがって、同じ機能に対して2つの異なる依存関係をサポートしないことを考えることをお勧めします。
pip install $(requirements.py)
:
私はこの
#!/usr/bin/env python
packages = 'p1 p2 p3'.split()
try:
import optional1
except ImportError: # opt1 not installed
try:
import optional2
except ImportError: # opt2 not installed
packages.append('optional2')
print(' '.join(packages))
が
chmod +x requirements.py
で、このスクリプトを実行可能にしており、最終的にはこのようにそれをピップを実行達成するために、小さなPythonスクリプトを使用します'$(requirements.py)'はrequirements.pyスクリプトを実行し、その出力を入れます(この場合、pacのリストkages)をピップにインストールする。
興味深い。私はあなたが 'pip'でこのような構文を使うことができるのか分かりませんでした。 –