我想制作一个源代码发行版(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>
当我手动编辑发行版pip
(setup.py
)并从所需的软件包中删除./dist/mypackage.tar.gz/mypackage/setup.py
时,pip3安装便可以正常工作。
是否还有其他方法可以对不同的版本具有不同的设置或要求?例如。使用两个不同的opencv-python
文件(如何?),每个文件指定一组软件包?我不太喜欢这种方法,因为在这些方法中我大多会重复。
答案 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]
调用。