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
.
兼容性的问题
- 是否可以更改 语法 使代码无法运行?
- 可用的标准导入是否有任何变化,例如,来自
__future__
的某些导入是否可以在早期版本中不可用?
- 由于我必须分发已编译的 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 格式是否改变。
我想在 Python 2.7
(比如 2.7.18
)的最新版本上开发和测试我的项目,但我希望我的项目仍然完整可用于 2.7
的早期版本(比如 2.7.7
)。在 CI 上本地 or/and 设置许多 2.7
变体进行测试可能是多余的。
所以有以下关于2.7.X
.
- 是否可以更改 语法 使代码无法运行?
- 可用的标准导入是否有任何变化,例如,来自
__future__
的某些导入是否可以在早期版本中不可用? - 由于我必须分发已编译的 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 格式是否改变。