python - 如何将轮子组织为 pypi 发行版以确保兼容性
问题描述
我正在开发一个 python 包,它使用 f2py 来编译几个 FORTRAN 模块。在将其移植到 Windows 时,我意识到使用源代码分发将其上传到 pypi 不是一种选择,这要归功于 Windows 不具备任何随附的默认编译器。因此,我将生产特定于机器的轮子,以便将它们上传到 PyPi。
我的问题是: 1. 在构建每个 bdist_wheel 之前,我是否应该在 setup.py 上将代码指定为特定于操作系统的代码,以便确定在为特定机器安装时应该获取哪个分发 pip?或者我应该让它独立于操作系统吗?2. 我可以将两个轮子作为同一个发行版上传到 pypi 吗?如果是这样,我该怎么做?只会
twine upload dist/*
工作?
解决方案
所以,我已经完成了关于这个主题的研究,我将在下面简要解释一下。希望它可以帮助任何其他有相同问题的初学者。
关于 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 机器之间对轮子使用交叉编译时。
推荐阅读
- ios - 在 Swift 4.2 中为现有的 Objective-C 代码获取运行时错误
- php - 如何使用 Eloquent ORM 创建三向枢轴
- ffmpeg - ffmpeg 找不到合适的输出格式
- javascript - 对象属性和值的相等运算符
- python - 在 Pandas 中计算日期
- .htaccess - htaccess 查询字符串到路径不起作用
- python - 如何根据用户输入使用 iloc() 显示增量原始数据?
- php - 如何在 PHP 中递归使用 array_map?
- python - 计算一系列字符串在列表中出现的次数 - Python
- android - 仅使用缓存响应。无需网络调用