0

我想创建一个应该与 Python 2.7 和 Python 3.3 兼容的包。逻辑应该只存在一次。

您通常如何表示编程逻辑 - 在 Python 2.7 或 Python 3.3 中?还是你选择不同的方式?

编辑:这个问题是如何在核心中处理的?

4

2 回答 2

2

我倾向于使用一些__future__导入(在 Python 3 中可能会安全地忽略它们),偶尔也会try except使用一些导入语句。另外,为了basestring / str兼容性,我定义了一个字符串类型。取决于我每个模块需要什么。

例如:

from __future__ import absolute_import
from __future__ import unicode_literals
from __future__ import division
from __future__ import print_function
try:
    import ConfigParser as cfgparser
except ImportError:
    import configparser as cfgparser
try:
    stringtype = basestring
except NameError:
    stringtype = str

我认为包已经做到了这一点,所以这可能是另一个不错的选择。

于 2013-05-21T09:36:56.133 回答
2

您只需使用相同的语言部分,并在其他部分进行条件或异常处理,就可以做到这一点。

这取决于你的软件做什么,以及你需要支持什么版本的 Python,这更难或更容易。通过仅支持 Python 2.6、2.7 和 3.3,它变得相对简单。

在关于 SO 的问题中无法回答的具体操作方式,因为它有很多内容。

我建议您查看这本书: http: //python3porting.com/,尤其是“支持 Python 2 和 3 无需 2to3 转换”一章和附录,其中有大量关于如何解决大多数不兼容问题的示例。

六库也可能有用

于 2013-05-21T09:47:41.717 回答