如果源代码可翻译但设置不可翻译,我可以使用 Wheel 将 Python 3.x 包发送到 2.7 吗?

Can I use Wheel to ship a Python 3.x package to 2.7 if the source code is translatable but the setup is not?

我正在构建一个 Python 包,我希望它可以在 Python 2 和 3 之间互操作。

在源代码目录中,我只使用在 2.7 和 3.x 中都可以是 运行 的代码,但是,在包定义级别(例如 setup.py) 我并不真正关心互操作性,我使用的是更现代的模块,不一定向后兼容 <2.7 版本,例如 setuptoolspathlib.

据我所知,setup.py 被执行一次 pip install 一个模块,但是,在本地安装我的包后需要源代码中的 setup.py 的东西,我观察到与功能相关的代码无法访问仅在包定义所在的父目录中可用的信息,这让我相信这些是抽象的。

如果我使用 wheel 将软件包构建为 Python 2.7 可执行文件,我是否可以期望它成为 运行 版本 2.7 的任何人都可以轻松下载它?

如果不是,我的策略应该是什么?

我想如果有人试图从“源代码分发 (sdist)”在 Python 2.7 下安装你的项目,但是会从“wheel”安装时没问题。因为从 sdist 安装确实会触发安装脚本的执行(setup.py),而从 wheel 安装则不会(wheel 分发存档甚至不包含安装脚本)。出现这种情况是因为您的“build back-end”似乎是 setuptools,与其他构建后端的行为可能有点不同.

无论如何,Python 打包生态系统中的一般建议是始终至少分发 sdist。

所以我认为你真的应该让你的 setup.py 与所有目标 Python 解释器版本兼容(所以你应该让它与你的情况下的 Python 2.7 兼容) .