我不知道发生了什么:
$ 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
答案 0 :(得分:4)
相对导入使用模块的
__name__
属性来确定模块在包层次结构中的位置。如果模块的名称不包含任何包信息(例如,它设置为“__main__
”),则解析相对导入,就像模块是顶级模块一样,无论模块实际位于文件的何处系统
澄清:__name__
属性通常是模块导入时的路径,例如在 foo / bar.py 中,如果foo是顶级包,__name__
将是'foo.bar'。在直接运行.py文件的特殊情况下,__name__
计算结果为'__main__'
,这意味着相对导入将无效。
答案 1 :(得分:0)
错误消息非常明确:您无法在主脚本中执行相对导入。有关详细信息,请参阅http://www.python.org/dev/peps/pep-0328/。