2012-08-13 57 views
22

我正在Python中开始一个新的开源软件,我想知道是否应该使用Python 2.x或Python 3.x.它将包括一个沉重的GUI,处理大量数据的复杂科学算法。我至少需要Numpy,Scipy,PyQT4,PyOpenGL,h5py,optionaly Matplotlib。它应该首先在2013年发布,并在未来几年进行更新和扩展。它将被不一定具备计算机科学背景,在各种计算机(Linux,Windows,Mac ...)中使用的科学家使用。有些机器可能老了。新项目:Python 2还是Python 3?

如果我选择Python 3.x,我担心软件和第三方库的安装可能会更加复杂,特别是在已安装Python 2.x的旧系统上。如果在大多数系统上都可以使用类似RPM的软件包(或Windows安装程序)以及外部库,那么最好不要编译所有内容。另外,我不知道3.x分支是否足够成熟。

如果我选择Python 2.x,在不久的将来如果2.x分支不再被使用(这种情况何时会发生?),我可能需要将软件移植到Python 3.x。

什么是最好的选择?

+3

的依赖,我想只有PyOpenGL尚未移植。 Matplotlib已经移植,但尚未发布,尽管该版本将在几个月后发布。其他人(numpy,scipy,PyQt4,h5py)都已经有了Python 3版本。 – 2012-08-13 17:12:29

+0

和python 3.3在一个月内。到2013年,python 3.4将从烤箱中取出,在维护模式下将取​​消2.7。顺便说一下,对于Windows,您已经在Golhke站点中安装了matplotlib二进制安装程序。 – joaquin 2012-08-13 17:58:35

+1

我不同意那些建议从2.7开始的人。看看你的依赖关系,看看还没有声称3.x支持的东西。然后看看这将是多少努力。做到这一点。问题解决了,每个人都爱你,你将来无需将代码从2转换为3。 – gps 2012-08-13 20:28:25

回答

5

的Python 3(回答这个问题变了!)

的Python 2是传统项目。新项目应该倾向于Python 3.

原因是Python 3(现在3.6)每年大致获得新版本。多年来它一直保持稳定(正处于第十个发行年!)。相比之下,Python 2(仍然是2.7)在过去几年里变化不大,并且将继续停滞不前。

欲了解更多信息: https://wiki.python.org/moin/Python2orPython3/

15

本维基确切地讨论了你的问题:Should I use Python 2 or Python 3 for my development activity?

这是一个非常大的主观部分,这个问题取决于正是您的具体情况和制约因素。

IMO,但是,如果你不能肯定,你需要将与Python v3.x工作,我会坚持使用Python 2.x的,但尝试写代码的所有第三方库是与Python 3.x作为兼容尽可能多(例如,print()等),以便如果您需要或想要迁移到v3,您的工作将不会如此具有挑战性。当然在moving from version 2 to 3上有文档和工具。而这在porting v2 code to v3

在您没有控制权或无法安装较新版本的Python或自定义第三方软件/库的安装的系统上,情况尤其如此。

鉴于您的软件将运行在各种系统(Linux,Windows,Mac ..)以及许多不同的用户,我仍然认为v2现在是更常见的分母。

因此,短期关注跨度总结:使用2.x版本,但perpare代码为3.x版

最后,如果你把这个搜索字符串“[巨蟒]版本3或2”成在SO搜索框中,您会发现一些related posts

+1

非常喜欢我的答案在http://stackoverflow.com/questions/11372190/python-2-and-python-3-dual-development – 2012-08-13 17:21:29

+0

做print()而不是print()是完全没有意义的,因为那种转换一旦你需要做2to3就很容易完成。使代码与Python 3兼容意味着不使用已弃用的模块或构造,并且非常小心字节与Unicode与本地字符串。 – 2012-08-17 18:21:40

2

我同意Levon。有了这些要求,我不会冒险从Python3开始,但是你应该编写代码,尽可能多地考虑Python3的变化。

看到这个问题Writing Python 2.7 code that is as close to Python 3.x syntax as possible,因为它可能会帮助你一些导入和标准,你可以使用它来使你的代码尽可能的面向未来。另外,如果你在各种系统中运行,你需要分发捆绑在应用程序中的python版本,或者信任用户的安装。大多数操作系统(非Windows)都带有Python的2.x版本,对于非技术用户来说升级到3.x并不会破坏系统。