Setuptools:对不同的必需软件包使用构建变体

时间:2020-06-10 17:14:50

标签: python-3.x setuptools sdist

我想制作一个源代码发行版(sdist),对于所需的软件包来说,它对于开发和目标平台而言应该有所不同。

更具体地说,当我为Raspberry Pi(目标平台)打包时,我不需要opencv-python,因为OpenCV是从那里的源代码构建的,但是在开发PC(Ubuntu)上,我需要{{1 }}。

我尝试遵循一些技巧,将opencv-python参数传递到--raspi中:

setup.py

当我运行install_requires = [ 'opencv-python >= 4.1.1', ... ] if "--raspi" in sys.argv: install_requires = [req for req in install_requires if not req.startswith('opencv-python')] sys.argv.remove("--raspi") setup( ..., install_requires=install_requires ) 时,这种方法的工作程度是,生成的python3 setup.py sdist --raspi不再包含./dist/mypackage.tar.gz/mypackage/mypackage.egg-info/requires.txt

但是当我运行opencv-python时,仍然出现错误,例如:

pip3 install ./dist/mypackage.tar.gz

这也是我将ERROR: Could not find a version that satisfies the requirement opencv-python>=4.1.1 (from mypackage==0.1) (from versions: none) 传递给--install-option="--raspi"的时候,我读到某处是从pip3 install运行时再次将参数传递给setup.py的一种方式。 / p>

当我手动编辑发行版pipsetup.py)并从所需的软件包中删除./dist/mypackage.tar.gz/mypackage/setup.py时,pip3安装便可以正常工作。

是否还有其他方法可以对不同的版本具有不同的设置或要求?例如。使用两个不同的opencv-python文件(如何?),每个文件指定一组软件包?我不太喜欢这种方法,因为在这些方法中我大多会重复。

2 个答案:

答案 0 :(得分:2)

您可以使用环境标记(在PEP 508中指定)将要求限制为特定平台:

install_requires = [
    'opencv-python >= 4.1.1; platform_machine == "x86_64"'
]

这会将opencv-python安装在x86_64架构上,但在ARM,PPC等上跳过它。

答案 1 :(得分:1)

除了@hoefling的答案,我现在也发现了这一点:

extras_require={  # Optional
        'dev': ['check-manifest'],
        'test': ['coverage'],
    },

来自pypa sampleproject。我将由pip install sampleproject[dev]调用。

相关问题