我想创建一个应该与 Python 2.7 和 Python 3.3 兼容的包。逻辑应该只存在一次。
您通常如何表示编程逻辑 - 在 Python 2.7 或 Python 3.3 中?还是你选择不同的方式?
编辑:这个问题是如何在核心中处理的?
我想创建一个应该与 Python 2.7 和 Python 3.3 兼容的包。逻辑应该只存在一次。
您通常如何表示编程逻辑 - 在 Python 2.7 或 Python 3.3 中?还是你选择不同的方式?
编辑:这个问题是如何在核心中处理的?
我倾向于使用一些__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
我认为六包已经做到了这一点,所以这可能是另一个不错的选择。
您只需使用相同的语言部分,并在其他部分进行条件或异常处理,就可以做到这一点。
这取决于你的软件做什么,以及你需要支持什么版本的 Python,这更难或更容易。通过仅支持 Python 2.6、2.7 和 3.3,它变得相对简单。
在关于 SO 的问题中无法回答您的具体操作方式,因为它有很多内容。
我建议您查看这本书: http: //python3porting.com/,尤其是“支持 Python 2 和 3 无需 2to3 转换”一章和附录,其中有大量关于如何解决大多数不兼容问题的示例。
六库也可能有用。