Python 3 是 Python 的未来,但 Python 2 仍处于活跃使用阶段,最好让您的项目在两个主要版本的Python 上都可用。本指南旨在帮助您了解如何最好地同时支持 Python 2 和 3。
要使您的项目与单源 Python 2/3 兼容,基本步骤是:
只担心支持 Python 2.7
确保您有良好的测试覆盖率(coverage.py可以提供帮助;python -m pip install coverage
)
了解Python 2 和 3之间的区别
使用Futurize(或Modernize)更新您的代码(例如python -m pip install future
)
使用Pylint帮助确保您的 Python 3 支持不会退步 ( python -m pip install pylint
)
使用caniusepython3找出哪些依赖项阻碍了您使用 Python 3 ( python -m pip install caniusepython3
)
一旦您的依赖项不再阻碍您,请使用持续集成来确保您与 Python 2 和 3 保持兼容(tox可以帮助针对多个版本的 Python 进行测试;python -m pip install tox
)
考虑使用可选的静态类型检查来确保您的类型使用在 Python 2 和 Python 3 中都有效(例如,使用mypy在 Python 2 和 Python 3 下检查您的类型;python -m pip install mypy
)。
注解
注意: usingpython -m pip install
保证pip
您调用的是为当前使用的 Python 安装的,无论是系统范围的pip
还是安装在虚拟环境中的。
同时支持 Python 2 和 3 的一个关键点是您可以从今天开始!即使您的依赖项不支持 Python 3,但这并不意味着您现在不能对代码进行现代化以支持 Python 3。支持 Python 3 所需的大多数更改会导致使用更新的实践来更清晰的代码,即使在 Python 2 代码中也是如此。
另一个关键点是,现代化您的 Python 2 代码以支持 Python 3 在很大程度上是自动化的。虽然由于 Python 3 明确了文本数据与二进制数据,您可能不得不做出一些 API 决策,但现在主要为您完成了较低级别的工作,因此至少可以立即从自动更改中受益。
在阅读有关移植代码以同时支持 Python 2 和 3 的详细信息时,请牢记这些关键点。
虽然您可以让 Python 2.5 与 Python 3 一起工作,但如果您只需要与 Python 2.7 一起工作,那就容易多了。如果放弃 Python 2.5 不是一个选项,那么这六个项目可以帮助您同时支持 Python 2.5 和 3 ( python -m pip install six
)。但是请注意,几乎所有列在本 HOWTO 中的项目都不会提供给您。
如果您能够跳过 Python 2.5 和更早版本,那么对代码进行所需的更改应该继续看起来和感觉像惯用的 Python 代码。在最坏的情况下,您将不得不在某些情况下使用函数而不是方法,或者必须导入函数而不是使用内置函数,但否则整体转换对您来说不应该感到陌生。
但是您应该只支持 Python 2.7。Python 2.6 不再免费支持,因此没有收到错误修正。这意味着您将不得不解决您在 Python 2.6 中遇到的任何问题。本 HOWTO 中还提到了一些不支持 Python 2.6 的工具(例如Pylint),随着时间的推移,这将变得越来越普遍。如果你只支持你必须支持的 Python 版本,这对你来说会更容易。