【问题标题】: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
    

    【讨论】:

    • 谢谢 :D 我不知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 2011-11-29
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多