请注意,我不再更新此答案。我在http://python-notes.curiousefficiency.org/en/latest/python3/questions_and_answers.html的个人网站上有更长的Python 3问答环节。
先前的答案:
(状态更新,2012年9月)
我们(即Python核心开发人员)预测Python 3.0发行时,将3.x变成大约2.x系列新项目的“默认”选择大约需要5年。该预测就是为什么2.7版本的计划维护期如此之长的原因。
最初的Python 3.0版本还发现了一些关键问题,它们的IO性能不佳,导致实际上无法用于大多数实际目的,因此从2009年6月下旬发布Python 3.1开始时间表是比较有意义的。 IO性能问题也是没有3.0.z维护版本的原因:没有充分的理由要有人坚持使用3.0而不是升级到3.1。
在撰写本文时(2012年9月),这意味着我们目前距离过渡过程还有3年多的时间,而且这种预测似乎仍在轨道上。
尽管人们在输入 Python 3代码时经常受到语法变化(例如print
变成函数)的咬伤,但这实际上并不是库移植的麻烦,因为自动2to3
转换工具可以很轻松地处理它。
实际上,最大的问题实际上是一个语义上的问题:Python 3不允许您像Python 2那样快速随意地使用文本编码。这既是它相对于Python 2的最大好处,也是移植的最大障碍:您必须解决 Unicode处理问题才能使端口正常工作(而在2.x中,许多代码静默地生成了错误的数据,非ASCII输入,给人以工作的印象,特别是在非ASCII数据不常见的环境中)。
甚至Python 3.0和3.1中的标准库仍然存在Unicode处理问题,因此很难移植很多库(尤其是与Web服务相关的库)。
3.2解决了许多此类问题,为Django等库和框架提供了更好的目标。3.2还带来了wsgiref
3.x 的第一个工作版本(用于Web服务器和用Python编写的Web应用程序之间的通信的主要标准),这是在Web空间中采用的必要先决条件。
现在已经移植了NumPy和SciPy之类的关键依赖项,例如,并已安装了安装和依赖项管理工具zc.buildout
,pip
并且virtualenv
可用于3.x。Pyramid1.3版本支持Python 3.2,即将发布的Django 1.5版本包括实验性Python 3支持,以及12.0版本的Twisted网络框架放弃了对Python 2.5的支持,从而为创建兼容Python 3的版本铺平了道路。
除了在Python 3兼容性库和框架方面取得进展之外,流行的JIT编译的PyPy解释器实现还积极地支持Python 3。
用于管理迁移过程的工具也已显着改进。除了2to3
作为CPython的一部分提供的工具(现在认为该工具最适合不需要维护2.x系列的应用程序的一次性转换)之外,还有python-modernize
,它使用2to3
基础结构来定位Python 2和Python 3的(大型)公共子集。此工具将创建一个代码库,借助six
兼容性库,该代码库将在Python 2.6+和Python 3.2+上运行。迁移现有的Unicode感知应用程序时,Python 3.3发行版还消除了“噪声”的一个主要原因:Python 3.3再次支持字符串文字的“ u”前缀(实际上并没有这样做)Python 3中的任何内容-刚进行了恢复,以避免对已经正确区分了Python 2中的文本和二进制文字的用户无意间使迁移到Python 3 变得更加困难。
因此,我们实际上对事情的进展感到非常满意-在我们的原始时间框架上还有将近2年的时间,而且整个Python生态系统中的变化都很好地荡漾着。
由于许多项目无法正确地整理其Python包索引元数据,并且一些维护者活动较少的项目也被派来添加对Python 3的支持,因此纯自动化的PyPI扫描程序仍然对Python 3库的状态给出了过分的否定看法支持。
在PyPI上获取有关Python 3支持级别的信息的首选方法是http://py3ksupport.appspot.com/
此列表由Brett Cannon(长期的Python核心开发人员)亲自策划,以解决不正确的项目元数据,源代码管理工具中尚未正式发布的Python 3支持以及具有最新分支的项目或支持Python 3的替代方案。在许多情况下,Python 3上尚不可用的库缺少关键的依存关系和/或其他项目中缺少Python 3的支持会减少用户需求(例如,一旦Django核心框架在Python 3,South和django-celery等相关工具更可能增加对Python 3的支持,并且Pyramid 和 Django 中都提供Python 3支持,这使得在其他工具(如gevent)中实现Python 3支持的可能性更高。
该网站位于http://getpython3.com/,其中包含指向 Python 3的书籍和其他资源的出色链接,确定了一些已经支持Python 3的关键库和框架,还提供了有关开发人员如何从Java 3寻求财务帮助的信息。 PSF将关键项目移植到Python 3。
另一个不错的资源是社区Wiki页面,其中介绍了在为新项目选择Python版本时要考虑的因素:http : //wiki.python.org/moin/Python2orPython3