pip与Python路径不一致致模块无法导入?原因及解决方案
问题分析与解决:ImportError: No module named requests(当pip和Python路径不一致时)
没错,pip和Python的路径不一致就是导致这个错误的核心原因!我来给你拆解清楚问题所在,以及对应的解决办法:
1. 为什么路径不一致会引发问题?
你通过/usr/local/bin/pip安装的requests,会被放在/usr/local/lib/python2.7/site-packages目录下,这个目录属于你后来安装的Python 2.7。而你运行应用时调用的/usr/bin/python是系统默认自带的Python 2.7,它只会去自己对应的/usr/lib/python2.7/site-packages目录找模块,自然找不到你用另一个pip安装的requests。
2. 路径不一致的原因是什么?
这在Mac OS X系统里很常见:
/usr/bin/python是系统预装的Python 2.7,属于系统级别的环境,一般不建议随便修改它的依赖。- 你大概率是通过Homebrew或者其他第三方工具额外安装了一套Python 2.7,同时配套安装了对应的
/usr/local/bin/pip,于是就出现了两套独立的Python 2.7环境,pip和默认Python不匹配。
3. 解决办法(按推荐程度排序)
方法一:使用虚拟环境(强烈推荐)
虚拟环境能彻底隔离项目依赖,避免不同环境的包冲突,是Python开发的最佳实践:
- 先安装virtualenv:
pip install virtualenv
- 进入你的项目目录,创建一个虚拟环境:
virtualenv venv
- 激活虚拟环境(激活后命令行前面会出现
(venv)标识):
source venv/bin/activate
- 现在安装requests,然后运行你的应用——所有依赖都会被安装在这个虚拟环境里,和系统环境完全隔离:
pip install requests python your_app.py
- 开发完成后,退出虚拟环境只需执行:
deactivate
方法二:用pip对应的Python来运行脚本
如果你不想用虚拟环境,直接调用和pip匹配的Python版本来运行应用即可:
/usr/local/bin/python your_app.py
或者如果你的系统里python2指向的是/usr/local/bin/python,可以简化成:
python2 your_app.py
方法三:给系统默认Python安装requests
如果你坚持要用系统默认的/usr/bin/python运行应用,那需要给这个Python单独安装requests:
可以用系统自带的easy_install:
sudo easy_install requests
或者找到系统默认的pip(如果有的话)来安装:
sudo /usr/bin/pip install requests
内容的提问来源于stack exchange,提问作者Abe Miessler




