我遇到了这个令人困惑的问题:
\dir0
\dir1 #package
__init__.py
\dir2 #sub-package
__init__.py
module.py
当我使用这个语句时:
from dir1 import dir2
然后:
from dir2 import module
这不起作用,但是
from dir1.dir2 import module
有效!
问:既然 dir2
只是一个从 __init__ 文件初始化的命名空间(模块对象),这怎么可能?
最佳答案
from dir2
不会查看当前模块中的本地名称,它仅查看 sys.path
搜索路径上的目录。
换句话说,您在此处导入 dir2
并不重要,因为模块的全局命名空间对可导入的内容没有影响。
Python 2 对于不以 .
开头的导入的规则如下:
在当前包中查找名称。如果您当前的模块是初始脚本或交互式解释器,则没有当前包。
依次查看
sys.path
中指定的每个目录。
如果您使用from __future__ importabsolute_imports
,那么第一个选项将被完全删除,仅使用第二个位置。
关于python - 为什么使用: from sub-package import item statement doesn't work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27930194/