web-dev-qa-db-ja.com

pythonバージョンに基づくinstall_requires

python 2とpython 3.の両方で機能するモジュールがあります。Python<3.2では、依存関係として特定のパッケージをインストールしたいと思います。Pythonの場合3.2以上。

何かのようなもの:

 install_requires=[
    "threadpool >= 1.2.7 if python_version < 3.2.0",
 ],

どうやってそれを作ることができますか?

41
iTayb

setuptools環境マーカー を使用してこれをサポートしています。

install_requires=[
    'enum34;python_version<"3.4"',
    'pywin32 >= 1.0;platform_system=="Windows"'
]

これの使用法は 公式ドキュメント で詳しく説明されています。 変更ログ に基づいて、v20.5で追加されましたが、実装はv20.8.1(15日間のギャップでした)まで安定していませんでした。


元の回答(まだ有効ですが、将来廃止される可能性があります):

setuptoolsは、extras_require引数内での使用をサポートしています。

形式は次のとおりです。

extras_require={
    ':python_version=="2.7"': ["mock"],
},

他の比較演算子をサポートします。


悲しいことに、それは documentation で言及されていません。答えを探していると、 PEP-426 が「環境マーカー」について話しているのが見つかりました。そのフレーズを使用して、次のコメントで setuptools ticket を見つけることができました。

依存関係を選択的かつ宣言的に要求するために、マーカー機能を正常に使用しました。例は backports.unittest_mock を参照してください。 「エクストラ」を通じてモックが必要になりますが、Python 2の場合のみです。Setuptools17.1を信頼できる場合は、その依存関係をpython_version < "3.3"に変更できます。

74
unholysampler

これについては説明しました こちら 、_setup.py_を使用して_sys.version_info_内のPythonバージョンをテストすることをお勧めします。

_import sys

if sys.version_info >= (3,2):
    install_requires = ["threadpool >= 1.2.7"]
else:
    install_requires = ["threadpool >= 1.2.3"]

setup(..., install_requires=install_requires)
_
11
sleepycal