Setuptools:使用不同的所需包的构建变体。

问题描述 投票:0回答:1

我想做一个源码发行版(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 文件(怎么做?),每个文件都指定了自己的软件包集? 我不太喜欢这种方式,因为我在这些方面会有大部分重复。

python-3.x setuptools sdist
1个回答
2
投票

你可以使用环境标记(如在 PEP 508),将需求限制在一个特定的平台上。

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

这将安装 opencv-python 在x86_64 Arch上,但在ARM、PPC等上跳过它。


1
投票

除了 @hoefling 的回答,我还发现了这个。

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

从... pypa样本项目. 我将通过以下方式调用 pip install sampleproject[dev].

© www.soinside.com 2019 - 2024. All rights reserved.