被相对进口困扰

时间:2011-05-07 20:25:19

标签: python

我不知道发生了什么:

$ 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

2 个答案:

答案 0 :(得分:4)

From PEP 328

  

相对导入使用模块的__name__属性来确定模块在包层次结构中的位置。如果模块的名称不包含任何包信息(例如,它设置为“__main__”),则解析相对导入,就像模块是顶级模块一样,无论模块实际位于文件的何处系统

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

答案 1 :(得分:0)

错误消息非常明确:您无法在主脚本中执行相对导入。有关详细信息,请参阅http://www.python.org/dev/peps/pep-0328/