pip install 成功了,import 却出错了
引言
可能不少人遇到这样的问题,为什么在 cmd 命令行中 pip install requests
成功了,在 Pycharm 中写代码 import requests
还是报 module not found 错误,装是装上了,又没完全装上,何哉?下面以 requests 这个库为例子,详细说明原因及解决办法。
原因
根本原因是,没有认识处理好 python 多版本共存问题,cmd 里装 requests 的 python 环境不是你 pycharm 里面运行的那个 python 环境。
在 cmd 输入 pip install requests
前,不妨先输入一个命令,查看有哪些 Python 环境:where python
cmd 显示如下,可以看到,电脑有三个 python 环境,当在命令行输入 python 时,默认进入了第一个 Python36_64 环境,这样的顺序是由编辑系统环境变量的先后顺序决定的
D:\a\b\c\Python36_64\python.exe
D:\c\b\a\Python388\python.exe
C:\x\y\z\python.exe
然后查看有哪些 pip :where pip
D:\a\b\c\Python36_64\Scripts\pip.exe
D:\c\b\a\Python388\Scripts\pip.exe
在 cmd 输入 pip install requests
时,只会给环境变量中从上到下第一个 pip 对应的 Python 环境装的,也就是给 Python36_64 这个环境装的。
然后看下 Pycharm 中是不是也用的这个 Python 环境,点击菜单栏的 File – Settings
展开 Python Interpreter,可以看到就是 cmd 里默认的 Python36_64 环境,点击上图中右上角的锯齿状设置按钮,可以给 Pycharm 切换 python 环境。然后这些增删操作看符号就知道了,不赘述。
如果选中了想要的 python 环境,可以点击上图左下角中的 + 号按钮,搜索 requests 包,点击并安装。
cmd 和 Pycharm 换源
由于某些原因 python 库默认的下载地址下载很慢,在 cmd 中可以依次输入以面命令切换成 douban 源,下载安装就起飞了
pip install pqi
pqi use douban
在 Pycharm 中也有等同操作,点击上一个图中的 Manage Repositories ,将 https://pypi.python.com/simple/ 修改成 https://pypi.douban.com/simple/ ,并且一路 OK 确定即可。
最后再回到 cmd 中
D:\a\b\c\Python36_64\Scripts\pip.exe
D:\c\b\a\Python388\Scripts\pip.exe
如果想要快速给第二个 Python388 装 requests,该怎么办呢?我们在文件夹中打开 D:\c\b\a\Python388\Scripts 这个路径。
我们可以直接在 cmd 中通过 pip3.8 install requests
给这个环境装 requests;
也可以复制一个 pip.exe,并粘贴命名为 pipenv.exe,pipenv install requests
;
除了 pip3.8 是这个环境独有的,其他两个 pip.exe 和 pip3.exe 在 python36_64 那个环境也有,所以 pip/pip3 命令会被在环境变量中优先级高的 python36_64 的 pip 接管。
如何避免这种问题
在系统中只装一个版本的 Python,本着一个项目一个虚拟环境的原则,每次新建项目,用系统的 Python 复制出一个虚拟环境,起个和项目相关的环境名,然后在 Pycharm 选择虚拟环境目录下,Scripts 文件夹下的 python.exe 作为项目的解析器。
Windows 下创建虚拟环境步骤如下:
安装 virtualenv
pip install virtualenv
在当前目录下创建虚拟环境
virtualenv env_crawl
激活、退出虚拟环境
在 cmd 中需要 cd 进入到虚拟环境目录下 Script 文件
夹中,使用下述命令激活
activate
当然,如果不在 Script 下,但在当前盘符中,使用
./xxx/yyy activate
这种相对路径格式也是可以的。
激活之后,cmd 会在 path 最前面显示一个 ({env_crawl}) ,在当前 cmd 会话中 Python 相关的操作都是针对这个虚拟环境而言的,操作和修改不会影响其他 Python 环境。如果想要退出环境,只需要使用
deactivate
值得欣喜的是,如果在 Pycharm 选择中虚拟环境,那么在 Pycharm 中打开终端,就可以直接进入到了当前的并且是已经激活的虚拟环境。