如何处理python导入,以便它们可以轻松地与py2和py3一起使用?

时间:2013-07-11 11:47:31

标签: python python-3.x

我正在寻找一种编写python包和模块的方法,使它们对Python 3很友好,而且它也很容易导入它们。

最常见的情况是您要为用户提供一个主要类,称之为MyCode

您的包名为mycode,您可以将MyCode类的正文放入mycode/mycode.py

现在,你会期望人们可以做其中的一件事:

import mycode
obj = mycode.MyClass()

或:

from mycode import MyClass()
obj = MyClass()

现在,问题是你应该把它放在__init__.py里面,以便在python 2.6+和3.x中完成这项工作。

2 个答案:

答案 0 :(得分:1)

使用绝对导入,它可以在python版本中正常工作。在mycode/__init__.py里面放了:

from __future__ import absolute_import

from mycode.mycode import MyClass

__future__导入从Python 2.5及以后开始工作;见PEP 328。如果没有absolute_import导入,则import mycode不明确; Python 3将它视为绝对包并加载顶级包,Python 2将其视为相对包并导入嵌套模块。

另一种方法是使用相对导入:

from .mycode import MyClass

将适用于相同版本的版本。

答案 1 :(得分:0)

from mycode import *添加到mycode/__init__.py的开头会使mycode/mycode.py的内容从mycode包中导入,就像它只是{{1}这样的普通模块,与您mycode.py脚本(import mycode)所在目录中的mycode.py相同,或者相对导入/mycode/ ...