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环境,这样将出错的可能降到最低。