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

标签 python pypi

这里有一个问题,如果我在包中使用 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/

相关文章:

python - 获取字典中任何未知内容的所有第一项

python - 在 Django 中全局设置 Decimal 选项

Python 和字符规范化

Python,UnboundLocalError : local variable 'answer' referenced before assignment

python - 如何使用 PIL 将图像保存在内存中并上传?

python-3.x - 使用代理服务器时 twine 上传失败

python - 查找 Python/Django 项目的所有未满足的依赖项

找不到Python包,没有名为 "coroapi"的模块

python - 如何防止 Pypi 软件包维护者决定删除软件包?

python - 我使用诗歌创建了一个 Python 包,并将其发布到 PyPI,但 PyPI 中缺少我的包描述