python - __init__.py 发生了怎样的变化?

标签 python python-3.x import package

我正在将我的 Python 2.7 内容(运行良好)迁移到 3.4.3。

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

from __init__ import *

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

ImportError: No module named __init__

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

我可以知道如何在 Python 3 中导入或访问在 __init__.py 中声明的变量吗?

最佳答案

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 .

关于python - __init__.py 发生了怎样的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31346375/

相关文章:

python - 使用pymssql,如何调用带有输出的存储过程

python - 无法修正抓取下一页链接的逻辑,使执行速度更快

python - 如何使用用户输入附加列表

python - 尝试下载文件时,使用 Python 的 Headless Chrome 会暂停

python : How to remove rows which has nan values for dict inside list

sql-server - 导入 SQL Server 中现有的存储过程

python - 导入错误 : No module named 'hypothesis'

python - 传递未知编码的字符数组

python - 在 Python/Django 中精确定位循环导入的工具?

android - 将Eclipse制作的Android项目从Github导入并转换为Android Studio Gradle-build