所以我有一个非常简单的包,具有以下结构:
package/
__init__.py
a.py
subpackage/
__init__.py
b.py
a.py:
print __name__
from .subpackage.b import *
b.py
print __name__
1)为什么我从内部包返回时运行python -m a
:ValueError: Attempted relative import in non-package
。但是如果我离开包目录并运行python -m package.a
它就可以工作并打印:
__main__
package.subpackage.b
另外,如果我将其作为具有__main__
选项的模块运行,为什么它会将__name__
称为-m
a.py?
2)为什么然后我写一个c.py
模块,我把它放在外包装中,只是导入from package import a
我得到:
package.a
package.subpackage.b
所以我理解现在来自a __name__
的{{1}}不是__main__
,但是当我使用python -m
选项作为模块运行时,为什么会这样呢?为什么如果我将相同的main.py
置于包内,那么再次出现尝试的相对导入错误?