我不明白为什么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发布于 2013-06-28 09:21:24
来自Python文档:
这个名称将用于导入搜索的各个阶段,它可能是子模块的虚线路径,例如foo.bar.baz。在本例中,Python首先尝试导入foo,然后是foo.bar,最后是foo.bar.baz。如果任何中间导入失败,则引发ModuleNotFoundError .。
因此,import fabric.api首先尝试加载fabric.py并成功,因为它找到了fabric.py文件。接下来,它尝试在刚刚加载的内容中加载api,但这不起作用。
因此,您的fabric.py正在跟踪fabric全局包。
这里有更多详细信息:http://docs.python.org/dev/reference/import.html
发布于 2013-06-28 09:52:40
Python有一个查找模块的位置路径:sys.path
['', ..., '/usr/lib/python2.7/site-packages/rsa-3.1.1-py2.7.egg', ...,
'/usr/lib/python2.7/site-packages', ...]它从左到右搜索匹配模块。
因此,它首先找到本地模块。它没有属性api。
如果本地模块被导入,站点包子模块作为其子模块导入,则不太明显。
https://stackoverflow.com/questions/17361271
复制相似问题