Python _u init__uuuuupy.py发生了什么变化?

Python _u init__uuuuupy.py发生了什么变化?,python,python-3.x,import,packages,Python,Python 3.x,Import,Packages,我正在将我的Python2.7(工作正常)迁移到3.4.3 在我的C:\Python34\Lib\MyLibs文件夹中,我有两个文件:和从Python 2.7中的同一文件夹复制过来的utils.py。在utils.py中,我在顶部附近有一行: from __init__ import * 在3.4.3中,当我执行import MyLibs.utils时,我会得到一个错误: 导入错误:没有名为\uuuuu init\uuuu的模块 但是,我可以确认在第一次运行import语句时,\uuu ini

我正在将我的Python2.7(工作正常)迁移到3.4.3

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

from __init__ import *
在3.4.3中,当我执行
import MyLibs.utils
时,我会得到一个错误:

导入错误:没有名为
\uuuuu init\uuuu的模块

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

我想知道如何导入或访问Python 3中
\uuu init\uuuuupy.py
中声明的变量。

Python 3使用绝对导入,其中不合格的导入总是作为顶级包查找。你没有这样的包裹

您应该使用显式相对导入:

from . import *
或者使用绝对导入

from packagename import *
在Python2中,您也不应该首先使用来自
。您可以使用packagename导入中的
*

您可以通过以下方式在Python 2中启用绝对导入模型:

from __future__ import absolute_imports


不过,您可能会遇到其他问题。移植并不是那么简单,请仔细阅读本文中的问题。此问题是。

为什么要从
\uuuu init\uuuu
导入?我的代码同时部署在Windows和Linux机器上。我在
\uuuu init\uuuu
中保存了一些特定于平台的全局变量,因此这是我每个站点必须自定义的唯一文件。@OldGeezer:这里的名字很奇怪;您通常不会从
\uuuu init\uuuu
导入;您将从包名导入
\uuuu init\uuuu.py
文件所在的包名。谢谢<代码>来自MyLibs。uuu init_uuu导入*
解决了问题。@OldGeezer:使用MyLibs导入*中的
\uuuu init\uuuu.py
之所以存在,只是因为目录不能包含源代码。否则,您将同时获得
sys.modules['MyLibs']
sys.modules['MyLibs.\uuu init\uu']
条目,因此包中有两组(单独的)全局变量。这可能会导致各种各样的问题,以后调试时会遇到困难。