Pythonのバージョンに応じてrequirements.txt


91

両方と互換性があるように、6つを使用してpython2パッケージをpython3(自分のものではない)に移植しようとしています。ただし、requirements.txtにリストされているパッケージの1つがpython3 stdlibに含まれ、pypiバージョンがpython3で機能しないため、条件付きで除外したいと思います。setup.pyでこれを行うのは簡単で、次のようなことができます。

if sys.version_info[0] == 2:
    requirements += py2_requirements
else:
    requirements += py3_requirements

しかし、requirements.txtにも正しいリストを反映させたいと思います。これについては、pipのドキュメントには何も見つかりません。だから誰かがそれを行う方法を知っていますか、それとも可能かどうか?


1
受け入れられた応答をstackoverflow.com/a/33451105/99834に変更してください-これは間違いなくこれを実装する正しい方法です。
sorin

回答:


139

以来、環境マーカーを使用してこれを実現できます。requirements.txtpip 6.0

SomeProject==5.4; python_version < '2.7'
SomeProject; sys_platform == 'win32'

以下で追加の要件を宣言することにより、setuptoolsでもサポートされますsetup.py

setup(
    ...
    install_requires=[
        'six',
        'humanize',
    ],
    extras_require={
        ':python_version == "2.7"': [
            'ipaddress',
        ],
    },
)

要件指定子も参照してください。そして、文字列に対応するPythonコマンドの文字列バージョンの。


いいね!どうすれば同じことができsys.platform == "win32"ますか?私が使用してみました:sys.platform == "win32"が、私はから「無効な環境マーカー」エラーが出るsetup()機能
アンドレ・キャノン

3
更新:PEP496-環境マーカーPEP508に置き換えられました-Pythonソフトウェアパッケージの依存関係仕様。これは、環境マーカーの構文を含む依存関係宣言構文を完全に指定します
jkdev 2017年

11

複数の要件ファイルを作成し、それらの共通パッケージを共通ファイルに入れて、それらを別のpip要件ファイルに含めることができます。 -r file_path

requirements/
  base.txt
  python2.txt
  python3.txt

python2.txt:

-r base.txt
Django==1.4 #python2 only packages

python3.txt:

-r base.txt
Django==1.5 #python3 only packages

pip install -r Requirements / python2.txt

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.