编写交叉兼容 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_literals
在 python2.7
中是可选的,但在 python3.0
中成为强制性的。
six
- 主要重命名 modules/functions 以在 python2
与 python3
之间产生更高的兼容性,但实际上并没有向后移植(或向前移植)功能。 python 版本 >=2.4
.
也支持它
future
- 更现代,仅支持 python>=2.6,>=3.3
,功能更丰富。
如果您可以放弃对旧版本 python 的支持,there is some agreement 似乎 future
优于 six
。
我正在编写交叉兼容的 Python 2 和 3 代码,在此 cheatsheet 的帮助下。我注意到有不同的包和模块可以帮助做到这一点:future
包(例如 future.utils
等)、six
包和内置的 __future__
模块。
使用这些包时有什么不同之处需要注意吗?我应该混合和匹配它们,还是只用其中之一编写完全交叉兼容的代码是可能的?
在python 2-3兼容性方面:
__future__
- 是 python 中的内置模块,它允许您在 python 版本中使用可选功能(与强制性相比)。例如,unicode_literals
在 python2.7
中是可选的,但在 python3.0
中成为强制性的。
six
- 主要重命名 modules/functions 以在 python2
与 python3
之间产生更高的兼容性,但实际上并没有向后移植(或向前移植)功能。 python 版本 >=2.4
.
future
- 更现代,仅支持 python>=2.6,>=3.3
,功能更丰富。
如果您可以放弃对旧版本 python 的支持,there is some agreement 似乎 future
优于 six
。