Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 突如其来的恐怖_Python_Import - Fatal编程技术网

Python 突如其来的恐怖

Python 突如其来的恐怖,python,import,Python,Import,我不明白Python为什么在这种情况下抛出异常。我尝试从全局安装的包中导入,同时存在一个前缀与包名相同的文件。我错过了什么 $ touch fabric.py $ python2 ... >>> from fabric.api import run Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named ap

我不明白Python为什么在这种情况下抛出异常。我尝试从全局安装的包中导入,同时存在一个前缀与包名相同的文件。我错过了什么

$ touch fabric.py
$ python2
...
>>> from fabric.api import run
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named api
$touch fabric.py
$python2
...
>>>从fabric.api导入运行
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ImportError:没有名为api的模块

来自Python文档:

该名称将在导入搜索的各个阶段使用,它可能是子模块的虚线路径,例如foo.bar.baz。在本例中,Python首先尝试导入foo,然后是foo.bar,最后是foo.bar.baz。如果任何中间导入失败,将引发ModuleNotFoundError。

因此,
import fabric.api
首先尝试加载您的
fabric.py
并成功,因为它找到了您的
fabric.py
文件。接下来,它尝试在刚刚加载的内容中加载
api
,但这不起作用

因此,您的
fabric.py
正在跟踪
fabric
全局包


此处有更多详细信息:

Python有一个查找模块的位置路径:
sys.path

['', ..., '/usr/lib/python2.7/site-packages/rsa-3.1.1-py2.7.egg', ..., 
 '/usr/lib/python2.7/site-packages', ...]
它从左到右搜索匹配的模块

所以它首先找到本地模块。 它没有属性
api


如果本地模块被导入,而站点包子模块作为其子模块被导入,则不明显。

它不是“导入结构”,而是“导入结构.api”,这意味着hierarchy@planetp我编辑了我的答案,试图让它更完整一点:)我想我开始明白了。最困难的部分是忘记我的Perl背景:)那么
module.submodule
可以是带有属性的模块,也可以是包?