Search
标题 文字
蟒蛇
Python2orPython3
Python2orPython3
首页
最近更新
查网页
帮助目录
Python2orPython3
页
不变页面
信息
附件
能运行python的软件用户
登录
我应该使用Python 2或Python 3进行开发活动吗?
内容
我应该使用Python 2或Python 3进行开发活动吗?
有什么区别?
我应该使用哪个版本?
但是我不想避免2.x?这是一个有很多错误的古老语言,它花了一个主要版本来让他们出来。
我想使用Python 3,但是我只想使用这个Python 2.x的这个小型库。我真的需要恢复使用Python 2或放弃使用该库吗?
我决定在3.x中写一些东西,但是现在有人想要使用只有2.x的东西。我该怎么办?
在通用代码库中支持Python 2和Python 3
可能有助于在Python 2和Python 3之间进行选择的其他资源
脚注
有什么区别?
简短版本:Python 2.x是旧版,Python 3.x是该语言的现在和未来
Python 3.0于2008年发布。最终的2.x版本2.7版本在2010年年中发布,并声明对这一生命
周期版本进行了扩展支持。之后,2.x分支机构将看不到新的主要版本。3.x正在积极发展,已经有超过五年的稳定版本,包括2012年的3.3版,2014年的3.4个,2015年的3.5个,2016年的3.6个。这意味着例如所有最近的标准库改进仅在Python 3.x中可用。
Guido van Rossum(Python语言的原始创建者)决定正确地清理Python 2.x,而不用考虑向后兼容性,而不是2.x范围内的新版本。最大的改进是更好的Unicode支持(默认情况下,所有文本字符串都是Unicode)以及saner字节/ Unicode分隔。
此外,核心语言的几个方面(例如打印和执行语句,使用分区的整数)已被调整为使新手更容易学习,并与其他语言更加一致,而旧的拼图已被删除(例如,所有类现在都是新样式的,“range()”返回一个高效的内存可迭代,而不是像2.x中的列表)。
在什么新的Python 3.0文档提供的主要语言的变化,并与现有的Python 2.x的代码不兼容的可能的来源一个很好的概述。Nick Coghlan(CPython核心开发人员之一)也创建了一个相对较广泛的关于转换的FAQ。
然而,更广泛的Python生态系统多年来已经积累了大量优质的软件。3.x中的反向兼容性的缺点是,其中一些软件(特别是公司内部的软件)仍然不能在3.x上运行。
我应该使用哪个版本?
您应该使用哪个版本主要取决于您想要完成的任务。
如果您可以使用Python 3.x完成所需的任务,那么很棒!有一些小的缺点,如非常略差库支持1,事实上,目前一些Linux发行版和Mac电脑仍然使用2.X的默认(尽管Python 3个中附带了很多的),但作为一个Python语言3 .x肯定准备好了。只要Python 3.x安装在用户的计算机上(这应该是简单的,因为很多阅读这个人的人只能为自己或他们控制的环境开发某些东西),而你正在写的东西,你不知道需要Python 2.x模块,这是一个很好的选择。此外,大多数Linux发行版都已经安装了Python 3.x,并且它们都可用于最终用户。有些正在淘汰Python 2作为预装的默认值。2
特别是,向新程序员介绍Python的教师应该首先考虑教Python 3,然后再引入Python 2中的差异(如果需要的话),因为Python 3 消除了许多怪癖,这些怪癖可能会使开始的程序员试图学习Python 2。
但是,有一些关键问题可能需要您使用Python 2而不是Python 3。
首先,如果您部署到您无法控制的环境中,那么可能会强加一个特定版本,而不是允许您从可用版本中自由选择。
其次,如果要使用尚未具有与Python 3兼容的发布版本的特定第三方软件包或实用程序,并且移植该软件包是一项非常重要的任务,您可以选择按顺序使用Python 2以保留对该包的访问。
Python 3已经广泛地支持创建GUI应用程序,Tkinter在标准库中。Python 3已经被PyQt支持,几乎从Python 3发行的那一天开始,PySide在2011年添加了Python 3支持。可以使用支持Python 3的PyGObject创建GTK + GUI ,并且是PyGtk的后继。
许多其他主要软件包已被移植到Python 3,包括:
NumPy和SciPy(用于数字处理和科学计算)
Django,Flask,CherryPy和Pyramid(网站)
PIL(图像处理模块)被其叉式枕头取代,它支持Python 3。
cx_Freeze(用于包装应用程序及其依赖项)
py2exe(为Windows用户打包应用程序)
OpenCV 3(一个开源计算机视觉和机器学习库)现在支持版本3.0和更高版本的Python 3。
请求(一个人类的HTTP库)
lxml(一个功能强大的Pythonic XML处理库,将libxml2 / libxslt与ElementTree API 相结合)
BeautifulSoup4(用于解析HTML和XML的屏幕抓取库)
用于交互式计算的IPython / Jupyter项目完全支持Python 3。
和许多,更多!
如果你想使用Python 3.x,但是由于依赖性而害怕,可能值得先做一些研究。这是一个正
在进行的工作,这个wiki页面可能已经过时了。此外,由Python 2.6+和Python 3.3+支持的大型常用子集,许多现代Python代码应该在Python 3上大部分未经修改,尤其是与Web和GUI框架互操作的代码,强制应用程序正确区分二进制数据和文本(可能需要来自六个兼容性模块的一些帮助来处理名称更改。
尽管官方python文档和教程已经完全更新为Python 3,但仍然有很多文档(包括示例)在Web上和使用Python 2的参考书籍,尽管更多的是一直在更新。这可能需要一些调整,以使事情与Python 3的工作。
有些人只是不想使用Python 3.x,这是它们的特权。但是,他们在少数。
值得注意的是,如果您希望使用Python的替代实现,例如IronPython,Jython或Pyston(或Python平台或编译器实现的较长列表之一),Python 3的支持仍然相对较少。如果您有兴趣选择此类实现,以便与其他系统集成或执行性能,可能会影响您。
但是我不想避免2.x?这是一个有很多错误的古老语言,它花了一个主要版本来让他们出来。
嗯,不完全 3.0和3.1中的一些较少破坏性的改进分别已经反映到2.6和2.7。有关回迁功能的详细信息,请参阅在Python 2.6的新增功能和什么新的Python 2.7。
一个非穷尽的功能列表,仅在3.x版本中可用,不会被转载到2.x系列:
字符串默认为Unicode
干净的Unicode /字节分离
异常链接
函数注释
关键字参数的语法
扩展元组拆包
非局部变量声明
此外,语言演进不仅限于核心语法或语义变化。它还关注标准库,在3.x中进行了许多改进,
不会直接转发到Python 2.请参见Python 3中的新增功能。然而,许多标准库的改进也可通过PyPI获得。
也就是说,写得很好的2.x代码可能很像3.x代码。这可能意味着许多事情,包括使用新式类,不使用古老的不推荐的奥术咒语打印,使用可用的惰性迭代器等。一个实际的例子:良好的2.x代码通常将使用xrange而不是范围; xrange是Python 3.x范围实现的起点(尽管Python 3中的范围更好,因为它可以处理大于sys.maxint的值)。应该注意的是xrange()不包括在Python 3中。
最重要的是,建议您专注于编写好的代码,以便2.x与3.x不再是一个问题。包括编写完整的单元测试套件,并获得Unicode权限。(Python 3.x相对于Unicode而言比Unicode少得多2.x认为这是一件好事,虽然它使一些软件包变得非常烦人。)
我想使用Python 3,但是我只想使用这个Python 2.x的这个小型库。我真的需要恢复使用Python 2或放弃使用该库吗?
假设您不到已经支持Python 3的替代软件包,您仍然可以考虑几个选项:
将库导入3.x. (“移植”意味着您使库工作在3.x.)
如果事实证明是非常困难的,并且所有其他的依赖项确实存在于2.x中,那么请考虑从2.x开始。正如已经在其他地方所解释的那样,一旦每个依赖关系被成功移植,好的2.x代码通常会使切换变得无痛。
确定功能是否真的那么重要。也许你可以放弃它?
理想的情况是您尝试将库移植到3.x. 通常你会发现有人已经在这个工作了。即使情况并非如此,现有的项目成员通常也会欣赏这些帮助,特别是随着移植常常在原始软件中发现错误,提高原始和3.x端口的质量。移植并不总是容易的,但通常比从头开始编写自己的东西更容易。
在这个Python 2移植指南中解释了你应该怎么做移植。基本思想是使用2.x版本的库,并检查在Python 2中使用-3命令行开关时,所有单元测试是否仍然通过,如果测试失败或发出警告,请修改源并重试(这可能需要降低与旧版本的Python版本的兼容性)。一旦使用-3开关代码运行时没有警告,那么尝试使用Python 3运行它。最好的情况是当这个“工作” - 使
用现代Python 2成语编写的代码与Python 3源代码兼容时,在这一点上,“港口”可能已经完成。
如果Python 3中的测试仍然失败,那么标准库的2to3实用程序通常可以自动创建一个将在Python 3下运行的版本。或者,Armin Ronacher的python-modernize实用程序代替Python 2.6+和3.2+或3.3+(取决于所使用的命令行选项)。(如果使用后者,检查测试仍然通过Python 2是很重要的!)
任何一种方法使得可以从单个2.x代码库并行支持2.x和3.x。这比试图并行维护独立的2.x和3.x分支要容易得多(只是问Python核心开发人员关于那个呢 - 他们已经停止了这么多年了)。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论