0

我正在寻找一种编写 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 中,为了使这项工作正常工作,你应该在里面放什么。

4

2 回答 2

1

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

from __future__ import absolute_import

from mycode.mycode import MyClass

导入工作__future__从 Python 2.5 及更高版本开始;参见PEP 328。没有absolute_importimport,import mycode是模棱两可的;Python 3 将其视为绝对并加载顶级包,Python 2 将其视为相对并导入嵌套模块。

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

from .mycode import MyClass

这将适用于相同的版本范围。

于 2013-07-11T11:55:27.767 回答
0

添加from mycode import *到开头mycode/__init__.py将使包的内容可以mycode/mycode.py从包中导入,mycode就像它只是一个普通模块一样mycode.py,就像您import mycode从与mycode.py脚本相同的目录(/mycode/)或执行相对导入到mycode/mycode.py...

于 2017-01-03T17:30:49.860 回答