编写交叉兼容 Python 2/3:__future__、6 和 future.utils 之间的区别?

Writing cross-compatible Python 2/3: Difference between __future__, six, and future.utils?

我正在编写交叉兼容的 Python 2 和 3 代码,在此 cheatsheet 的帮助下。我注意到有不同的包和模块可以帮助做到这一点:future 包(例如 future.utils 等)、six 包和内置的 __future__模块。

使用这些包时有什么不同之处需要注意吗?我应该混合和匹配它们,还是只用其中之一编写完全交叉兼容的代码是可能的?

在python 2-3兼容性方面:

__future__ - 是 python 中的内置模块,它允许您在 python 版本中使用可选功能(与强制性相比)。例如,unicode_literalspython2.7 中是可选的,但在 python3.0 中成为强制性的。

six - 主要重命名 modules/functions 以在 python2python3 之间产生更高的兼容性,但实际上并没有向后移植(或向前移植)功能。 python 版本 >=2.4.

也支持它

future - 更现代,仅支持 python>=2.6,>=3.3,功能更丰富。

如果您可以放弃对旧版本 python 的支持,there is some agreement 似乎 future 优于 six