如何发布不同版本的二进制文件到pypi.org?

How to release different version's binary to pypi.org?

这里有一个问题,如果我在我的包中使用 cython,编译的 .pyd 文件与不同的 python 版本不同,例如,在 [=18= 下编译的 .pyd 文件]3.7 不会被 python3.8 识别。如果我想发布我的包到 pypi ,比如说版本号是 1.0.0,我怎么上传包,让不同版本的 python 运行 相同的命令 pip install package==1.0.0并单独获取自己版本的编译文件?

谢谢。

通常,您应该发布两种存档格式。它们被称为“分发包”,我们有:

  • "源分布"(简称"sdist");
  • 和“内置发行版”(或“二进制发行版”、“bdist”简称)。

Sdists 不应包含任何特定于平台的组件,在您的情况下不应包含已编译的 Cython 代码。

另一方面,bdists 旨在包含编译代码(例如编译的 Cython 文件),因此允许特定于平台。

现在最常见也是唯一推荐的bdist格式是“wheel”。

所以你应该分发(在 PyPI 上发布)你项目的 sdist,如果可能的话,尝试构建尽可能多的特定平台车轮 尽你所能。

例如 distribution packages for pandas v2.2.1,只有一个 sdist 和许多不同的 wheels,涵盖了广泛的范围:

  • Python 解释器版本
  • 操作系统
  • CPU 位数
  • 等等

注意所有文件名的不同之处。 PyPI 不允许上传同名文件。 pip(以及其他与打包相关的工具)能够解释这些文件名并对它们的内容进行有根据的猜测,从而选择正确的发行版进行下载和安装。