python的常见错误,意思非常明确,这个模块找不到了。导致的原因也很确定:
- 确实没有安装这个模块
- 路径不对
第一个把模块安装上就完事了,第二个往往是导致这个错误最常见的原因。
如果你能确定你已经安装了这个模块,那肯定是import的路径有问题。import导入时,搜索的路径是有顺序的,查看当前python导入模块的搜索路径,可以在交互命令行中执行下面的命令:
In [1]: import sys
In [2]: sys.path
Out[2]:
['',
'/System/Library/Frameworks/Python.framework/Versions/2.7/bin',
'/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
'/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
'/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
'/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
'/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
'/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
'/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
'/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
'/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages',
'/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PIL',
'/Library/Python/2.7/site-packages',
'/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/extensions',
'/Users/youwangqiu/.ipython']
可以看到,我使用的python是现在当前路径(' '
)下搜索,然后去系统的各个路径下搜索。而这个机制将导致一个很大的问题。
##不要乱给你的.py
文件命名
你写了一个比较大的应用,多个.py
文件,相互之间有import
。给这些.py文件取名是件麻烦事,一般都是根据文件的功能来取名的嘛。所以你就将一个进行http请求的文件命名成了requests.py
(同时,你的应用需要系统的requests
模块)。调试整个应用的时候,你发现,这个requests
模块怎么和教程上的不一样啊,怎么该有的函数都没有啊,要你有什么卵用!
requests
模块说:怪我喽…
大哥,你导入的不是系统的requests
模块啊,你导入的是你的requests.py
啊,当然什么都没有了。
这里虽然没有报no module named
的错误,但是这个错误更难调试,和no module named xxx
师出同源,如果你导入的requests模块下的一个函数或类的话,no module named xxx
就出现了。
所以说给文件命名之前先考虑清楚,不要潇洒地随便写,不然你就是自己挖坑自己跳。
如果你发现自己确实犯了这个错误,并且改了文件名,请千万记住,还要把当前目录下相应的.pyc
删除掉,不然还是没用,至于为什么,请自行参考任何一本python教程。