我正在这个备忘单的帮助下编写交叉兼容的Python 2和3代码。我注意到有不同的包和模块可以帮助做到这一点:future
包(例如 future.utils
等(、six
包和内置__future__
模块。
使用这些软件包时是否有任何需要注意的差异?我应该混合和匹配它们,还是可以编写完全交叉兼容的代码来编写仅使用其中一个代码?
在python 2-3兼容性方面:
__future__
- 是 Python 中的一个内置模块,它允许您在 Python 版本中使用可选功能,其中它们是可选的(相对于强制性的(。例如,unicode_literals
在python2.7
中是可选的,但在python3.0
中成为强制性的。
six
- 主要是重命名模块/功能以在python2
到python3
之间产生更高的兼容性,但实际上并没有向后移植(或转发(功能。它也支持python版本>=2.4
。
future
- 更现代,仅支持python>=2.6,>=3.3
,并且功能更丰富。
似乎有一些共识,即如果您可以放弃对旧版本的 python 的支持,future
比six
更可取。