Python 2.7.X 到 2.7.Y 兼容性

Python 2.7.X to 2.7.Y compatibility

我想在 Python 2.7(比如 2.7.18)的最新版本上开发和测试我的项目,但我希望我的项目仍然完整可用于 2.7 的早期版本(比如 2.7.7)。在 CI 上本地 or/and 设置许多 2.7 变体进行测试可能是多余的。

所以有以下关于2.7.X.

兼容性的问题
  1. 是否可以更改 语法 使代码无法运行?
  2. 可用的标准导入是否有任何变化,例如,来自 __future__ 的某些导入是否可以在早期版本中不可用?
  3. 由于我必须分发已编译的 Python 文件(.pyc,通过 py_compile 模块编译),我也想知道 [=52= 中是否可以进行任何更改] bytecode 在早期版本中阻止代码执行。

我想如果所有的答案都是“否”,我可以放心地只在一个 2.7 版本上开发和测试我的项目。

我试图搜索它但没有成功。请分享您的经验 and/or 个链接。

UPD 1:我应该从一开始就说清楚,这不是我想用2.7,这是环境的要求。

至少 Python 2.7.9 对 'ssl' 模块进行了大量更改,因此尝试在早于 2.7.9 的 Python 上使用 SSL for 2.7.18 的代码将失败。所以对数字 2 说“是”。

一般而言,大多数项目的兼容性是相反的,使用您需要支持的最旧版本,并从旧到新向上工作,而不是从新到旧向下工作。我不知道有哪个软件项目在另一个方向上做出保证。

请注意,Python 2.7 不再支持 2.7.18,因此除非您使用像 PyPy (https://www.pypy.org/) 这样的兼容版本,否则您新开发的项目将 运行 过时Python 个版本。

如果您想提供收缩包装产品,也许可以看看通常的解决方案,例如 pyinstaller (https://www.pyinstaller.org/) or freeze (https://wiki.python.org/moin/Freeze)

#3 可能有效,如果你研究字节码操作码列表,这些操作码不会随时间变化太多(https://github.com/python/cpython/commits/2.7/Include/opcode.h)但不知道 on-disk 格式是否改变。