python - 为什么使用: from sub-package import item statement doesn't work?

标签 python python-2.7

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

 \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 对于不以 . 开头的导入的规则如下:

  1. 在当前包中查找名称。如果您当前的模块是初始脚本或交互式解释器,则没有当前包。

  2. 依次查看 sys.path 中指定的每个目录。

如果您使用from __future__ importabsolute_imports,那么第一个选项将被完全删除,仅使用第二个位置。

关于python - 为什么使用: from sub-package import item statement doesn't work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27930194/

相关文章:

python - 创建 MySQL View ,在表中添加额外的计算字段

python - 导入错误: Could not import settings 'mysite.settings' (Is it on sys.路径?): No module named mysite.设置

python - 列表不在类定义内的方法之间传递

python - 使用 peewee python 支持动态列名称和排序方向的最佳方法

python - Flask request.form 不检索任何数据

python - flask WTForms : how do I get a form value back into Python?

Python,要 float 的负数字符串

python - 仅给出子列表的元素(Python),查找列表中元素的索引的最有效方法是什么

python - 在 .py 文件中的文本文件上运行 doctest?

python - 稀疏矩阵行中的连续元素