我可以在setup.py中的tests_require中使用环境标记吗?

时间:2017-08-04 17:29:10

标签: python setuptools

我正在寻找一个开源软件包(MoviePy),它根据安装的软件包调整其功能。

例如,要调整图像大小,它将使用OpenCV提供的功能,否则使用PIL /枕头,否则使用SciPy。如果没有,它将优雅地回退到不支持调整大小。

File not found (404 error)函数在setup.py参数中标识了其中一些可选依赖项,因此可以运行测试。

然而,还有另一层复杂性尚未处理。某些可选包不适用于所支持的所有平台版本。 (我认为一个例子是他们使用的OpenCV版本不适用于适用于Windows的Python 3.3,但如果错误,请不要挂断。我正在寻找通用解决方案。)

解决方案似乎是使用environment markers,根据哪个Python版本和哪个操作系统指定应安装哪些软件包的版本。我可以使用tests_require文件执行此操作。我想我可以用Conda做这个(用不同的格式 - 冒号而不是分号)。但是我如何在setup.py中执行此操作?

我迄今为止的实验都失败了。

示例:在包版本之后放置环境标记,并带有分号:

requirements.txt

然后在调用setup中,参数为:

requires = [
    'decorator>=4.0.2,<5.0',
    'imageio>=2.1.2,<3.0',
    'tqdm>=4.11.2,<5.0',
    'numpy',
    ]

optional_reqs = [
    "scipy>=0.19.0,<1.0; python_version!='3.3'",
    "opencv-python>=3.0,<4.0; python_version!='2.7'",
    "scikit-image>=0.13.0,<1.0; python_version>='3.4'",
    "scikit-learn; python_version>='3.4'",
    "matplotlib>=2.0.0,<3.0; python_version>='3.4'",
    ]

doc_reqs = [
    'pygame>=1.9.3,<2.0', 
    'numpydoc>=0.6.0,<1.0',
    'sphinx_rtd_theme>=0.1.10b0,<1.0', 
    'Sphinx>=1.5.2,<2.0',
    ] + optional_reqs

test_reqs = [
    'pytest>=2.8.0,<3.0',
    'nose', 
    'sklearn',
    'pytest-cov',
    'coveralls',
    ] + optional_reqs

extra_reqs = {
    "optional": optional_reqs,
    "doc": doc_reqs,
    "test": test_reqs,
    }

当我在Travis,Python 3.6.2,PIP 9.0.1上构建它时:

tests_require=test_reqs,
install_requires=requires,
extras_require=extra_reqs,

我可以在> python setup.py install error in moviepy setup command: 'extras_require' requirements cannot include environment markers, in 'optional': 'scipy<1.0,>=0.19.0; python_version != "3.3"' 中为tests_require指定环境标记吗?

1 个答案:

答案 0 :(得分:2)

是的,你可以。将环境标记附加到tests_require=[ 'mock; python_version < "3.3"' ] 的每个相关元素,用分号分隔,例如:

{{1}}