我最近使用Django1.6b1将Python 2.7中的django应用程序移植到Python 3.3。
我的导入语句不再适用于自定义模块导入(用户,视图...),我必须在这些导入之前添加一个点。为什么?
示例:
import EmailUser #worked with python 2.7 but doesn't work with 3.3
import .EmailUser #works
答案 0 :(得分:3)
不是错误; Python 3强制显式相对导入。
来自docs:
相对导入的唯一可接受的语法是
from .[module] import name
。不以.
开头的所有导入表单都被解释为 绝对进口。 (PEP 0328)
此外,import .EmailUser
在任何Python版本中都是无效的语法;它必须是from . import EmailUser
。
答案 1 :(得分:3)
这是因为“绝对进口”,也就是不开始的进口。是绝对的,必须在模块路径中找到。在Python 2.6,2.7中,您可以通过执行
逐个文件地进行此操作from __future__ import absolute_import