这里有一个问题,如果我在包中使用 cython,编译的 .pyd
文件与不同的 python 版本不同,例如,在 python3.7 下编译的 .pyd 文件将不会python3.8 识别。如果我想将我的包发布到 pypi ,假设版本号是 1.0.0
,我如何上传包,让不同版本的 python 运行相同的命令 pip安装package==1.0.0
并单独获取自己版本的编译文件?
谢谢。
最佳答案
通常您应该发布两种存档格式。它们被称为“分发包”,我们有:
- “源发行版”(简称“sdist”);
- 和“内置发行版”(或“二进制发行版”,简称“bdist”)。
Sdists 不应包含任何特定于平台的组件,在您的情况下不应包含已编译的 Cython 代码。
另一方面,bdists 旨在包含编译的代码(例如编译的 Cython 文件),因此允许特定于平台。
如今最常见且唯一推荐的 bdist 格式是“wheel”。
因此,您应该分发(在 PyPI 上发布)项目的 sdist,如果可能的话,尝试构建尽可能多的特定于平台的轮子尽你所能。
例如,参见 distribution packages for pandas v2.2.1 ,只有一个sdist和许多不同的轮子,涵盖了广泛的范围:
- Python 解释器版本
- 操作系统
- CPU位数
- 等等
请注意所有文件名的不同之处。 PyPI 不允许上传具有完全相同名称的文件。 pip(以及其他与打包相关的工具)能够解释这些文件名并对其内容进行有根据的猜测,从而选择正确的发行版进行下载和安装。
关于python - 如何将不同版本的二进制文件发布到 pypi.org?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65954466/