我想做一个源码发行版(sdist),在所需的包方面,开发平台和目标平台需要有所不同。
更具体的说,当我为Raspberry Pi(目标平台)打包时,我不需要 opencv-python
因为OpenCV是由那里的源码构建的,但在开发电脑(Ubuntu)上,我需要的是 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
再从 pip
.
当我手动编辑分布 setup.py
(./dist/mypackage.tar.gz/mypackage/setup.py
)并去除 opencv-python
从所需的包,然后pip3安装工作。
还有其他方法可以为不同的构建设置不同的包或要求吗?例如,使用两个不同的 setup.cfg
文件(怎么做?),每个文件都指定了自己的软件包集? 我不太喜欢这种方式,因为我在这些方面会有大部分重复。
你可以使用环境标记(如在 PEP 508),将需求限制在一个特定的平台上。
install_requires = [
'opencv-python >= 4.1.1; platform_machine == "x86_64"'
]
这将安装 opencv-python
在x86_64 Arch上,但在ARM、PPC等上跳过它。
除了 @hoefling 的回答,我还发现了这个。
extras_require={ # Optional
'dev': ['check-manifest'],
'test': ['coverage'],
},
从... pypa样本项目. 我将通过以下方式调用 pip install sampleproject[dev]
.