我遇到了这个令人困惑的问题:

 \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只是初始化为from __init__ file的名称空间(模块对象),怎么可能?

最佳答案

from dir2不在当前模块中查看本地名称,它仅查看sys.path搜索路径上的目录。

换句话说,在这里导入dir2都没关系,因为模块的全局名称空间对可以导入的内容没有影响。

不以.开头的导入的Python 2规则如下:


在当前软件包中查找名称。如果当前模块是初始脚本或交互式解释器,则没有当前软件包。
依次查看sys.path中命名的每个目录。


如果使用的是from __future__ import absolute_imports,则将第一个选项完全删除,仅使用第二个位置。

关于python - 为什么使用:从子包中导入项目语句不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27930194/

10-10 14:33