我如何将 bdist 包上传到 PyPI?install_requires?

How do I `install_requires` a bdist package uploaded to PyPI?

我有一个依赖可执行文件的 Python 包。由于可执行文件需要相当长的时间来构建,我想使用 bdist 通过我公司的内部 PyPI 索引分发它。我在 macOS 和 Linux.

上都需要它

我的 setup.py 在两个操作系统上都运行良好。 运行python setup.py bdist upload -r private-pypi后索引有如下两个包:

但是,我 运行 遇到将 foo 包指定为其他项目中的 install_requires 要求的问题。我有另一个 bar 包需要它。我对它有以下要求(在 setup.pyrequirements.txt 文件中):

foo>=0.0.1,==0.*

我们还有其他几个软件包,这种需求格式适用于所有这些软件包,但不适用于这个软件包。我得到的错误是:

Could not find a version that satisfies the requirement foo==0.*,>=0.0.1 (from bar==1.6.12) (from versions: 0.0.1.linux-x86_64, 0.0.1.macosx-10.12-intel)
No matching distribution found for foo==0.*,>=0.0.1 (from bar==1.6.12)

即使在构建已上传到 PyPI 的包的同一台机器上,我也会遇到此错误。

在这种情况下,bar 包与 pip install --upgrade /path/to/bar 一起安装(并且 .pypirc 配置为查看我们的内部 PyPI 索引),但它也可以在同一个私有PyPI 索引。虽然我还没有尝试 pip install 从那里开始,但我怀疑我会得到同样的错误。

AFAIK,这是我们唯一一个作为 bdist 而不是 sdist 分发的包。源分发版没有在其版本号后附加平台(它是 -0.0.1.tar.gz 而不是 -0.0.1.linux-x86_64.tar.gz),所以问题几乎肯定存在。

这仍然让我无所适从。我很困惑 bdist 制作了一个 pip 似乎无法解析的包版本。

我的目标是在包含可执行文件的 PyPI 上获取这个包,然后能够在仍然限制版本的情况下通过客户端下载它。我应该怎么做呢?

使用 bdist_wheel 似乎解决了问题。