pip安装事故
在开发python项目时,Ubuntu系统安装的两个python版本,一个2.7,一个3.5。所有的第三方包如果使用pip安装,将安装到系统的2.7版本下的python的site-packages目录下。如果使用pip3安装,将安装到系统的3.5版本下的python的site-packages目录下。
然而,我们通常会自己去官网下载一个自己想要的python版本,不同于系统的。当我们安装好后,使用pip或pip3为我们这个新的python安装第三方模块后,运行程序。boom!!!裂开。报了ImportError错误。这时你可能怎么也想不明白,自己明明刚刚才安装的这个模块,为什么提示未找到?
出现这种情况一般有两种可能:
- 你确实安装了,也安装到了对应的python的
site-packages目录下。但是你没有设置环境变量,使得系统找不到该模块。 - 你确实安装了,但安装到了系统的python的
site-packages目录下。
我们这里主要关注第二种可能,出现这个问题的原因就在于pip的默认安装路径。
一般pip默认对应python2.x版本,因此直接使用pip自然也就将模块安装到系统自带的python2.7的site-packages目录下了,pip3对应python3.x,默认安装到系统自带的python3.5的site-packages目录下。
网上有很多方法,可以解决。但我觉得使用virtualenv这个工具是最好不过的。
virtualenv
我们可以用pip安装virtualenv
pip install virtualenv
进入到项目根目录下,键入命令
virtualenv --no-site-packages venv
这将为你的项目创建一个虚拟环境,名为venv。参数--no-site-packages表明已经安装到系统python下的第三方包不会复制过来。使用--system-site-packages会将系统python下的第三包复制过来。
使用source命令进入该环境。
source venv/bin/activate
注意,这时你的终端命令提示符变了,有个(venv)前缀,表明你当前位于一个名为venv的环境下。
这时,用pip安装的所有包都被安装到venv这个环境下,系统的python环境不受影响。即venv环境是专门为你这个项目所创建的。
退出当前环境,使用deactivate命令:
deactivate
此时回到正常的环境,现在pip或python均将在系统python环境下进行。
因此每当我们有新项目时,我们可以为该项目创建一个独立的python环境,这样将出错的可能降到最低。