0

我一直在为之工作的一个人对我将用 python 2.5 和 2.7 编写的程序更新到 python 3.3 有所保留。我从事生物信息学工作,我尝试使用的许多 python 代码都是 3.0 之前的版本,虽然我有一个在虚拟机上运行 2.7 的 linux,但在我的主机上,我已经在 python 3.3 并开发我的程序它。我知道如果程序严重依赖库,那么可能存在一些兼容性问题,但除此之外,我不明白为什么我不能花一点时间升级它。我觉得我应该澄清一下,这些程序中的大多数都不过是几百行代码。

我真正想知道的是;

两个版本之间是否存在一些可能导致程序运行不同的真正差异?

是否可以简单地更新到 3.3 并通过将 print 更改为 print() 或将 urlib2 更改为更新 urllib 来清理它?

4

3 回答 3

1

编写适用于 python 2.6+ 和 3.3+ 的代码非常容易。在每个文件的开头使用以下内容

from __future__ import division, absolute_import \
        unicode_literals, print_function

然后知道差异;您可以使用six来简化移植。但是请注意,许多需要的模块可能只为 2.x 编写(我怀疑在生物信息学领域比在一般编程领域更是如此),而且可能不仅是您的代码需要移植。我希望您在一段时间内仍然需要 2.x。我建议不要使用 2to3,对我来说正确的方法是编写可在 python 2.x 和 3.x 上运行的代码——它简化了开发和测试。

至于旧代码,请注意,str/unicode混淆会多次打击你 - 有些 python 2str应该是bytes,有些应该是 python 3 str

于 2013-08-06T17:22:14.630 回答
0

我不知道 SO 是否是提出这个问题的最佳地点,但这里的链接列出了 Python 2.x 和 3.x 之间的所有区别:http: //docs.python.org/3.0/whatsnew/3.0.html

阅读后,您可以轻松地了解需要对 2.x 程序执行哪些操作才能将它们带入 3.x。

于 2013-08-06T17:01:02.643 回答
0

顺便说一句:你熟悉2to3吗?

对于这种 Q+A 格式,可能“出错”的事情列表基本上太大了。 以下是文档对移植代码的看法。最重要的一点是编写良好的测试,但在学术界,我意识到这并不总是现实。取而代之的是,请参阅“陷阱”部分,了解自动化无法/无法获取的最常见问题。

我在学术代码中看到最多的两个是依赖整数除法和以非二进制模式打开文件。在不知道具体情况的情况下,我会说要注意那些。

于 2013-08-06T17:07:21.897 回答