转载请注明来源地址和原作者(CFishHome)
前沿
通过网易云课堂开设的Django搭建企业级官网的学习,特此留下学习笔记记录学习遇到的困难和心得。这也是一个长期的学习过程,相信一个好的产品都需要耐心和钻研。本人有个小习惯,不太喜欢直接复制粘贴别人的知识笔记,喜欢自己测试别人的笔记后再自己总结,所以有不便之处请见谅。
虚拟环境
通常情况下,我们安装好Python3.x或者Python2.x,都会拥有对应的一个Python环境(也称之为系统级的Python环境,也就是有Scripts文件夹的那个目录环境),那么当我们需要使用第三方包时,在命令行界面执行pip install xx的方式进行安装,这样安装会将那个包安装到你的系统级别的Python环境的某个文件夹中。这样的方式会为以后造成什么样的影响呢?假如我们一直是使用Django1.10写网站,突然领导安排我们去维护一个使用Django0.9开发的网站,但是由于Django1.10不再兼容Django0.9的一些语法了,而我们Python环境只有Django1.10,所以维护起来着实不易,也不可能同一环境同时安装两个版本的Django,多少会有兼容冲突问题。正所谓一山(系统级Python环境)容不得二虎(两个版本的Django),所以我们只要额外创造两座山(两个虚拟环境),分别容一只虎不就解决问题了。所以,用两个虚拟环境分别安装两个不同的Django版本来适配基于不同Django版本开发出来的项目。
下小节重点介绍两种创建虚拟环境的软件工具,分别是virtualenv和virtualenvwrapper,前者是少用的软件工具(存在两点缺陷,下小节会有总结),后者是常用的软件工具(完全解决了virtualenv的两点缺陷,方便操作虚拟环境)。所以,强烈建议使用virtualenvwrapper来创建虚拟环境。
virtualenv软件工具
安装virtualenv
virtualenv是用来创建虚拟环境的软件工具,我们可以通过pip或者pip3来安装,如下命令:
pip install virtualenv
pip3 install virtualenv
从上面我们可以看出pip和pip3命令的不同,如果电脑只安装一个Python版本(py2或py3),那么执行pip install virtualenv就会智能安装到对应这个系统级别的python环境种。但若是电脑同时安装了两个python版本(py2和py3),那么就要区分pip(执行的话安装到py2环境中)和pip3(执行的话安装到py3环境中)命令的使用。
利用virtualenv创建虚拟环境
打开CMD,在任意目录下执行以下命令(注意,只有安装virtualenv成功才能执行下面的命令),就创建虚拟环境了:
virtualenv [虚拟环境的名字]
如下图:
创建虚拟环境完成后有两个需要我们注意的问题:
1.这个虚拟环境是采用哪个作为它的解释器?
我们都知道不管安装Python3.x还是Python2.x,在系统环境变量中都会自动添加一个对应一个Python版本的Scripts文件夹路径。而虚拟环境相当于小型的系统级别的Python环境,所以虚拟环境也需要解释器进行编译运行我们创建的项目。如果你当前的Python3/Scripts的查找路径在Python2/Scripts的前面,那么将会使用python3作为这个虚拟环境的解释器,否则将会使用python2作为这个虚拟环境的解释器。如果只有一个版本,那么自然使用这个版本作为虚拟环境的解释器了
2.我们创建的虚拟环境在哪个目录可以找到?
前面我们是在任意目录下执行创建虚拟环境的,成功创建会生成指定名字的目录,这个目录就是虚拟环境,所以虚拟环境在终端当前目录(我的是C:\Users\Administrator\Desktop)下就可以找到。如下图所示:
进入虚拟环境
虚拟环境创建成功后,如果我们要想在这个虚拟环境中安装第三方包、卸载第三方包或者开发项目,前提是必须先进入虚拟环境,例如:如果没进入这个虚拟环境,然后执行pip安装命令,那么虚拟环境作用就失效了,因为默认又会将第三方包安装到系统级别的Python环境当中,这尤其需要注意!
进入虚拟环境,在不同的操作系统中有不同的方式,一般分为两种:
- Windows操作系统
如果你的开发平台在Windows操作系统,首先进入到虚拟环境的Scripts文件夹,然后执行activate激活命令进入虚拟环境。如下图所示:
- *nix操作系统
如果你的开发平台在*nix操作系统,那么与windows系统执行activate激活命令目录不一样,通过执行以下命令进入虚拟环境:
source /path/to/virtualenv/bin/activate
退出虚拟环境
既然能进入虚拟环境,自然就可以退出虚拟环境,执行下面命令就可以完成:
deactivate
创建虚拟环境同时指定Python解释器
前面说过了,如果一台电脑有两个Python版本,那么作为虚拟环境的解释器就会依据系统环境变量Scripts路径的前后位置来决定,如果一台电脑只有一个Python版本,那么虚拟环境默认就使用这个Python解释器。然而,实际中,依靠环境变量路径前后顺序来决定解释器,这种限制并不灵活。所以提供了-p参数来灵活指定具体的Python解释器:
virtualenv -p C:\Python36\python.exe [虚拟环境名称]
对于virtualenv的小总结
- 安装virtualenv
pip install virtualenv pip3 install virtualenv
- 创建虚拟环境
virtualenv [虚拟环境的名字] virtualenv -p C:\Python36\python.exe [虚拟环境名称]
-
进入虚拟环境
在相应操作系统平台下,执行activate激活命令进入虚拟环境。 - 退出虚拟环境
deactivate
评析virtualenv的缺陷
上面virtualenv软件包有两点缺陷:
1.每次创建虚拟环境都在终端当前目录下创建,如果跑到多个目录下创建虚拟环境,那么会导致多个目录都含有虚拟环境,那么就变成不好管理了。 - 当进入某个虚拟环境时,都必须进入Scripts目录下执行actiate命令才能激活虚拟环境,这十分不便捷。
virtualenvwrapper软件工具
virtualenvwrapper这个软件包可以让我们管理虚拟环境变得更加简单,完美的解决了virtualenv留下的两个缺陷:跑到某个目录下通过virtualenv来创建虚拟环境,并且激活的时候需要跑到具体的目录下去激活。
安装vritualenvwrapper
- *nix平台下
pip install virtualenvwrapper
- windows平台下
pip install virtualenvwrapper-win
Tips:在实际开发中,我们不需要先安装virtualenv再安装virtualenvwrapper
,virtualenvwrapper软件包其实已经包含了virtualenv。所以在实际应
用中,我们只需要安装virtualenvwrapper即可,因为
virtualenvwraper是基于virtualenv扩展出来的。
virtualenvwrapper基本使用方法
1.创建虚拟环境
(1)在任意目录下执行下面这条命令:
mkvirtualenv my_env
创建成功后,它会在你当前用户(我的是C:\Users\Administrator\)路径下创建一个Envs文件夹,然后将这个my_env虚拟环境安装到这个目录下,如果你电脑种安装了python2和python3,并且两个版本都安装了virtualenvwrapper,那么将会使用环境变量中第一个出现的Python版本来作为这个虚拟环境的Python解释器。如下图所示:
上图我们也可以看出,当创建成功后,默认会自动进入该虚拟环境中,我们执行deactivate命令退出当前虚拟环境。
(2)在使用 mkvirtualenv的时候,我们也还可以指定--python的参数来指定具体的 python解释器路径:
mkvirtualenv --python==C:\Python36\python.exe hy_env
2.切换到指定虚拟环境
workon my_env
3.退出当前虚拟环境
deactivate
4.删除指定虚拟环境
删除虚拟环境其实就是删除my_env目录。
rmvirtualenv my_env
如下图所示:
从下图可以看出Envs文件夹下已经不存在my_env虚拟环境了。
5.列出所有虚拟环境
lsvirtualenv
6.进入到虚拟环境所在的目录
cdvirtualenv
由于测试需求,把my_env删了,下图列举进入django-env虚拟环境为例:
修改mkvirtualenv的默认路径
前面学习mkvirtualenv创建虚拟环境的时候,说过它会默认在当前用户路径下创建一个Envs目录,然后把虚拟环境安装到这个Envs目录下。那么如何修改这个默认路径呢?修改默认路径的好处是什么?仔细斟酌,假如我们自己新建一个专属于自己的目录,那么把虚拟环境都放在自己创建目录,那么管理起来会十分方便,而且还是自己喜欢的目录名(●'◡'●)。以下是修改默认路径的方法:
在我的电脑->右键->属性->高级系统设置->环境变量->系统变量 中添加一个参数 WORKON_HOME ,将这个
参数的值设置为你需要的路径。
如下图所示:
配置好新的WORKON_HOME路径后,然后关掉CMD窗口,重新启动一个CMD,接着我们新创建一个虚拟环境来测试下成不成功,执行mkvirtualenv new_env命令,结果如下图: