__init__.py有何变化?

时间:2015-07-10 16:58:42

标签: python python-3.x import packages

我正在将我的Python 2.7东西(工作正常)迁移到3.4.3。

在我的C:\ Python34 \ Lib \ MyLibs文件夹中,我有两个文件:__init__.pyutils.py从Python 2.7中的同一文件夹复制过来。在utils.py中,我在顶部附近有这条线:

from __init__ import *

在3.4.3中,当我执行import MyLibs.utils时,我收到错误:

  

ImportError:没有名为__init__的模块

但是,我可以确认第一次运行import语句时__init__.py中的代码已成功执行。

我是否知道如何导入或访问Python 3中__init__.py中声明的变量。

1 个答案:

答案 0 :(得分:2)

Python 3使用绝对导入,其中非限定导入始终被视为顶级包。你没有这样的包裹。

您改为使用显式相对导入:

from . import *

或使用绝对导入

from packagename import *

不是说你应该在Python 2中首先使用from __init__ import * 。您改为使用from packagename import *

您可以在Python 2中启用绝对导入模型:

from __future__ import absolute_imports

请参阅PEP 328 - Imports: Multi-Line and Absolute/Relative

然而,您可能会遇到其他问题。移植并不是那么简单,请阅读Porting to Python 3 book中的问题。这个问题是a common migration problem