首页 > 解决方案 > 如何将轮子组织为 pypi 发行版以确保兼容性

问题描述

我正在开发一个 python 包,它使用 f2py 来编译几个 FORTRAN 模块。在将其移植到 Windows 时,我意识到使用源代码分发将其上传到 pypi 不是一种选择,这要归功于 Windows 不具备任何随附的默认编译器。因此,我将生产特定于机器的轮子,以便将它们上传到 PyPi。

我的问题是: 1. 在构建每个 bdist_wheel 之前,我是否应该在 setup.py 上将代码指定为特定于操作系统的代码,以便确定在为特定机器安装时应该获取哪个分发 pip?或者我应该让它独立于操作系统吗?2. 我可以将两个轮子作为同一个发行版上传到 pypi 吗?如果是这样,我该怎么做?只会

twine upload dist/*

工作?

标签: pythonpypipython-wheel

解决方案


所以,我已经完成了关于这个主题的研究,我将在下面简要解释一下。希望它可以帮助任何其他有相同问题的初学者。

关于 pip 和 PyPi 的包平台兼容性规范

我的问题本质上是:“即使我classifiers=['Operating System :: OS Independent']对 setup.py 所做的是生成特定于操作系统的 .whl 发行版,我仍然可以在 setup.py 上设置 PyPi 包吗?”

答案是肯定的。classifiers参数应该包含要在 PyPi 或其他分发服务上为用户显示的兼容性信息,但它不会影响单个机器特定轮子的兼容性,并且应该总体反映包。

检查 scipy 的 setup.py 文件,例如,我们得到:

CLASSIFIERS = """A :: Bunch :: Of :: Other :: Non-OS related info
    Operating System :: Microsoft :: Windows
    Operating System :: POSIX
    Operating System :: Unix
    Operating System :: MacOS"""

通过 pip 安装时检查的轮子发行版的操作系统兼容性 - 这有效地限制了轮子对不同操作系统的兼容性 - 是由轮子本身指定的信息设置的,基于在为自身编译或为指定的来宾编译时的主机系统wheel by 选项--platform-name,例如在 Windows 机器之间对轮子使用交叉编译时。


推荐阅读