【问题标题】:Import statement doesn't work as expected with Python 3.3导入语句在 Python 3.3 中无法按预期工作
【发布时间】:2013-08-07 16:33:48
【问题描述】:
我最近使用 Django1.6b1 将 django 应用程序从 Python 2.7 移植到 Python 3.3。
我的导入语句不再适用于自定义模块导入(用户、视图...),我必须在这些导入之前添加一个点。为什么 ?
例子:
import EmailUser #worked with python 2.7 but doesn't work with 3.3
import .EmailUser #works
【问题讨论】:
标签:
python
python-2.7
python-3.x
python-import
【解决方案1】:
不是错误; Python 3 强制显式相对导入。
来自docs:
相对导入唯一可接受的语法是from .[module]
import name。所有不以. 开头的导入表单都被解释为
绝对进口。 (PEP 0328)
另外,import .EmailUser 在任何 Python 版本中都是无效语法;它必须是from . import EmailUser。
【解决方案2】:
这是因为“绝对导入”,即不以 . 开头的导入。是绝对的,必须在模块路径中找到。在 Python 2.6、2.7 中,您可以通过
逐个文件地打开它
from __future__ import absolute_import