【问题标题】:Stumped by relative imports受到相对进口的困扰
【发布时间】:2011-05-07 20:25:19
【问题描述】:

我不知道发生了什么:

$ ls
__init__.py  main.py  module.py
$ cat main.py
from . import module
$ python3 main.py
Traceback (most recent call last):
  File "main.py", line 1, in <module>
    from . import module
ValueError: Attempted relative import in non-package

【问题讨论】:

标签: python


【解决方案1】:

From PEP 328:

相对导入使用模块的__name__ 属性来确定该模块在包层次结构中的位置。如果模块的名称不包含任何包信息(例如,它被设置为'__main__'),那么无论模块实际位于文件系统的哪个位置,相对导入都会被解析为模块是顶级模块。

澄清:__name__ 属性通常是模块被导入时的路径,例如在 foo/bar.py 中,如果 foo 是顶级包,__name__ 将是 'foo.bar'。在您直接运行的 .py 文件的特殊情况下,__name__ 的计算结果为 '__main__',这意味着相对导入将不起作用。

【讨论】:

    【解决方案2】:

    错误信息非常清楚:您不能在主脚本中进行相对导入。详情请见http://www.python.org/dev/peps/pep-0328/

    【讨论】:

    • 您介意解释一下 PEP 的说法吗?我看了看,我仍然很难过。
    • @Tshepang:我在寻找我应该在 PEP 中看到的内容时遇到了同样的问题。请参阅我的答案以获得解释的直接链接(摘自我的答案)。
    • ValueError: Attempted relative import in non-package 并不完全清楚。你确定你没有把你的知识视为理所当然吗?
    猜你喜欢
    • 2017-12-03
    • 1970-01-01
    • 2015-09-12
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 2013-01-23
    相关资源
    最近更新 更多