谈起Python的虚拟环境,任何一个Python老司机应该都不会陌生。为什么要使用虚拟环境呢?使用虚拟环境的主要目的是为了更好地隔离每个项目所需要的不同的依赖,避免由于不同的项目需要不同的依赖库版本而产生的冲突情况。在Python中常见的虚拟环境有virtualenv和pipenv,这两个都有不少人在用,在这篇文章中,我将着重向大家介绍用得比较多的virtualenv及其衍生的一个虚拟环境管理工具——workon。一旦大家学会了Python中虚拟环境的配置,以后妈妈再也不用担心你的项目工程中的包会发生冲突了。

    要使用virtualenv,首先我们要安装它。安装的方式很简单,通过pip命令即可。配置好Python的环境变量后,直接打开命令行输入:pip install virtualenv,这时pip就会自动帮你安装好virtualenv相关的依赖包。这里我推荐大家在安装时尽量指定国内的镜像源来提高安装速度,常用的国内pip镜像源是https://pypi.douban.com/simple/,所以我们的pip安装命令可以这样写:pip install -i https://pypi.douban.com/simple virtualenv。如果你安装的时候发现速度比较慢,可以常用这种指定镜像源的方式进行安装。

    安装好之后应该如何使用它呢?先打开命令行,输入如下格式的命令:virtualenv your_path_to_make_virtualenv,即可在当前目录下创建一个virtualenv的环境。比如我们想在D盘的根目录下创建一个名为test_ve的虚拟环境,可以像下面这样来操作:

    image.png
    image.gif
    首先我们将命令行路由到想创建虚拟环境的路径,然后输入virtualenv test_ve即可。执行创建虚拟环境时,virtualenv会默认使用你当前环境变量中设置的python解释器,比如这里我的环境变量中配置的是anaconda的python解释器,所以这个虚拟环境就会默认使用anaconda的解释器。如果你想利用其它版本的python解释器,比如python2版本的,有两个方法:一个是修改环境变量中默认的python版本,另外就是在创建虚拟环境时指定要使用的python解释器的路径,命令如下:

    image.png
    image.gif
    这样,我们就指定了安装在本机C盘的Python27中的python解释器作为新创建的virtualenv的解释器了。在创建一个新的虚拟环境时,virtualenv只会帮我们安装好基本的setuptools、pip和wheel等基础库,其他的一律保持空白,如果需要任何第三方库均需要我们自己安装。你在指定的virtualenv中安装的库,绝对不会影响另一个virtualenv中安装的库,使每个不同的virtualenv之间达到完全隔离独立的目的,极大地方便了我们对python包的管理。

    virtualenv创建完毕后,会在当前目录生成一个virtualenv对应的文件夹,这个文件夹中包含这个虚拟环境所需要的所有文件。

    image.png

    接下来,我们就可以开始使用这个虚拟环境了。拿之前我们创建的test_ve为例,我们先通过命令进入到test_ve里面的Script路径下,再运行activate.bat即可进入到这个虚拟环境,如下图所示:
    image.png
    image.gif
    运行了activate命令后,可以看到我们的命令行前面多了一个(test_ve)的前缀,这就说明当前我们运行命令的位置位于虚拟环境中,我们正在虚拟环境中操作。比如此时直接输入pip list,就将列出虚拟环境中通过pip安装的第三方包。如下图所示:

    image.png

    从这个list可以看出,我们现在操作的就是这个虚拟环境。如果此时我们使用pip intall命令来安装别的包,那么安装也将安装到本虚拟环境的路径下,不会影响默认安装好的python版本。

    如果想退出虚拟环境,那么直接敲入deactivate即可,此时我们可以看到路径前面的括号消失。如果此时我们再到其他路径下运行pip list,可以看到此时列出的就是我们默认安装的python所安装的包了。如下图所示:

    image.png
    image.gif
    virtualenv本身的使用很简单,如果要配合pycharm使用,那么只需要在选择项目的python解释器的时候,选择这个虚拟环境中的python解释器的位置即可,也很简单,这就是virtualenv的全部内容。但大家每次像这样使用virtualenv的时候,会非常麻烦,因为每次都要进入到虚拟环境的Script目录下activate之后才能操作这个虚拟环境,并且要退出时也要到Script目录下输入deactivate才能操作。有没有什么办法可以简化这个操作,让我们在任意的目录下都可以操作我们指定的虚拟环境呢?答案是有的,我们可以通过另外一个基于virtualenv的衍生工具——virtualenvwrapper-win。

    virtualenvwrapper也需要我们手动去安装,在命令行中输入命令pip install -i https://pypi.douban.com/simple virtualenvwrapper-win,就可以安装这个wrapper工具了。安装完成之后,我们可以另外打开一个cmd窗口,输入virtualenvwrapper的一个命令workon,这个命令用于展示当前本机中存在哪些虚拟环境,如下图所示:

    image.png

    当然大家刚安装好wrapper时,运行workon命令可能会显示一个空的列表。要想像上面这样显示本机的所有虚拟环境,需要先配置workon_home环境变量。如下图所示,比如我设定d:\envs为workon命令的home目录:
    image.png
    image.gif 然后,我们将之前创建好的所有virtualenv都移动到这个D:\envs下,接下来再运行workon命令,就可以得到上图一样的本机所有virtualenv的列表。如果我们指定使用某个具体的virtualenv,只需要在workon后面跟着这个虚拟环境的名字即可,比如我们现在要进入scrapy_study这个虚拟环境中,只需要在任何的命令行目录下,输入workon scrapy_study即可,如下图所示:
    image.png

    再也不用先定位到虚拟环境的Script目录再activate了,方便多了。

    如果要创建新的虚拟环境也很方便,只需要使用virtualenvwrapper中的mkvirtualenv命令即可,比如我现在创建一个名叫py3scrapy的虚拟环境,可以在任意目录运行以下命令:

    image.png
    image.gif
    创建的virtualenv的文件夹会被virtualenvwrapper自动放到workon_home对应的路径下,并且创建完毕后,virtualenvwrapper会自动帮我们进入这个virtualenv,非常方便。同样道理,如果我们要指定python2版本作为解释器,也可以通过-p参数进行指定,命令如下:

    image.png

    以上就是python中的virtualenv对应的全部操作,大家在学习和使用这个virtualenv时,一个是要理解为什么要使用virtualenv,另外就是对于virtualenvwrapper中workon命令和mkvirtualenv命令的使用。掌握了virtualenv的操作后,以后我们在创建项目时对包的管理就非常方便了。

    2019.6.5 补充

    由于刚刚在mac上安装并配置了anaconda以及virtualenv的环境,所以趁着记忆尤新,赶紧记录下在mac上安装并配置virtualenv的过程。其实整体过程跟windows上是类似的,只是在环境变量的配置上有一点点不同。

    我安装的时候mac上什么软件都没有,由于后面要研究深度学习相关的,所以就直接上anaconda版的python了。安装anaconda的过程很简单,就是直接在官网下载好mac版的安装包,然后双击安装即可。安装anaconda之后,它会很贴心地在你的home目录下(即/Users/xxxx 下)生成一个.bash_profile文件,也就是mac下的环境变量配置文件(这个文件默认是没有的)。这个环境变量文件里面export了anaconda的安装路径,所以你会发现打开cmd后,输入python直接就变成了anaconda版本的python了,非常方便,那这样anaconda算是已经安装并配置好了。接下来就是要安装virtualenv和virtualenvwrapper了,安装命令跟上面讲的一样,直接pip安装即可。把wrapper安装好之后,我们照例要配置下workon_home路径,否则无法指定虚拟环境创建的路径,这里就涉及到要配置环境变量了。

    这里我们先在/Users/qinggchu路径下创建一个.bashrc文件,命令如下:

    1. vi .bashrc

    image.gifimage.gif 由于.bashrc文件默认是没有的,所以这个命令会创建一个.bashrc文件,接下来我们就在这个文件里面指定好workon_home和virtualenvwrapper所使用的python路径即可。命令如下:

    1. export WORKON_HOME=/Users/qinggchu/Desktop/python_project
    2. export VIRTUALENVWRAPPER_PYTHON=/Users/qinggchu/anaconda3/bin/python3
    3. source /Users/qinggchu/anaconda3/bin/virtualenvwrapper.sh

    image.gif
    第一条命令WORKON_HOME是指定workon的根目录,含义跟上面讲的一样,指定以后默认创建项目的位置,这个大家可以根据自己的实际情况改这个位置。第二个命令是指定virtualenvwrapper所使用的python的路径,也是根据你自己实际的python路径改一下。第三句是source执行virtualenvwrapper自带的一个sh文件,它会帮助我们创建一些必要的文件,这个位置也要大家根据自己机子上的virtualenv的实际路径来改。把这些命令敲到.bashrc文件里面后,我们保存并退出。然后在命令行里面再执行source .bashrc即可生效了。

    这样配置完后,其实还没有完,因为你会发现重启后.bashrc文件的内容就失效了,你必须再次执行 source .bashrc命令才行。那么如何达到一劳永逸的效果呢?办法是有的,我们可以打开之前的.bash_profile文件,在最后加上这段代码即可:

    1. if [ -f ~/.bashrc ]; then
    2. source ~/.bashrc
    3. fi

    image.gif
    注意命令之间的空格。添加好后保存并退出,然后source .bash_profile这个文件,就可以达到一劳永逸的效果了,开机后仍然可以直接使用workon和mkvirtualenv命令。

    关于workon和mkvirtualenv命令的使用方式跟之前讲的一摸一样,就不再赘述了,希望大家使用愉快。