首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >意外ImportError

意外ImportError
EN

Stack Overflow用户
提问于 2013-06-28 09:17:41
回答 2查看 983关注 0票数 0

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

代码语言:javascript
复制
$ 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
EN

回答 2

Stack Overflow用户

发布于 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

票数 0
EN

Stack Overflow用户

发布于 2013-06-28 09:52:40

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

代码语言:javascript
复制
['', ..., '/usr/lib/python2.7/site-packages/rsa-3.1.1-py2.7.egg', ..., 
 '/usr/lib/python2.7/site-packages', ...]

它从左到右搜索匹配模块。

因此,它首先找到本地模块。它没有属性api

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17361271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档