【发布时间】:2021-01-29 12:27:22
【问题描述】:
这里有个问题,如果我在我的包中使用cython,编译的.pyd文件与不同的python版本不同,例如python3.7下编译的.pyd文件将无法被python3.8识别。如果我想将我的包发布到pypi,比如版本号是1.0.0,我该如何上传包,让不同版本的python运行相同的命令pip install package==1.0.0并分别获取自己版本的编译文件?
谢谢。
【问题讨论】:
这里有个问题,如果我在我的包中使用cython,编译的.pyd文件与不同的python版本不同,例如python3.7下编译的.pyd文件将无法被python3.8识别。如果我想将我的包发布到pypi,比如版本号是1.0.0,我该如何上传包,让不同版本的python运行相同的命令pip install package==1.0.0并分别获取自己版本的编译文件?
谢谢。
【问题讨论】:
通常,您应该发布两种归档格式。它们被称为“分发包”,我们有:
Sdists 不应包含任何特定于平台的组件,在您的情况下不应包含已编译的 Cython 代码。
另一方面,bdists 旨在包含已编译的代码(例如已编译的 Cython 文件),因此允许特定于平台。
如今最常见且唯一推荐的 bdist 格式是“wheel”。
所以你应该分发(在 PyPI 上发布)你的项目的 sdist,如果可能的话,尝试构建尽可能多的特定于平台的 wheels尽你所能。
例如distribution packages for pandas v2.2.1,只有一个sdist 和许多不同的wheels,涵盖范围广泛:
请注意所有文件名的不同之处。 PyPI 不允许上传具有完全相同名称的文件。 pip(和其他与打包相关的工具)能够解释这些文件名并对其内容进行有根据的猜测,从而选择正确的发行版进行下载和安装。
【讨论】: