python必备virtualenv

1,035 阅读2分钟

pip安装事故

在开发python项目时,Ubuntu系统安装的两个python版本,一个2.7,一个3.5。所有的第三方包如果使用pip安装,将安装到系统的2.7版本下的python的site-packages目录下。如果使用pip3安装,将安装到系统的3.5版本下的python的site-packages目录下。

然而,我们通常会自己去官网下载一个自己想要的python版本,不同于系统的。当我们安装好后,使用pippip3为我们这个新的python安装第三方模块后,运行程序。boom!!!裂开。报了ImportError错误。这时你可能怎么也想不明白,自己明明刚刚才安装的这个模块,为什么提示未找到?

出现这种情况一般有两种可能:

  1. 你确实安装了,也安装到了对应的python的site-packages目录下。但是你没有设置环境变量,使得系统找不到该模块。
  2. 你确实安装了,但安装到了系统的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

此时回到正常的环境,现在pippython均将在系统python环境下进行。

因此每当我们有新项目时,我们可以为该项目创建一个独立的python环境,这样将出错的可能降到最低。