0

我最近使用 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    
4

2 回答 2

4

不是错误;Python 3 强制显式相对导入。

文档

相对导入唯一可接受的语法是from .[module] import name. 所有不以开头的导入形式.都被解释为绝对导入。( PEP 0328 )

此外,import .EmailUser在任何 Python 版本中都是无效的语法;它必须是from . import EmailUser

于 2013-08-07T16:36:04.417 回答
3

这是因为“绝对导入”,即不以 . 开头的导入。是绝对的,必须在模块路径中找到。在 Python 2.6、2.7 中,您可以通过以下方式逐个文件地打开它

from __future__ import absolute_import
于 2013-08-07T16:36:24.200 回答