十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
相信只要学习python的同学对于虚拟环境这个概念肯定不会太陌生,虚拟环境指的是一个个单独隔离的python开发环境。各个虚拟环境之间互不干扰,都有自己独立的开发包。就像是在电脑上装了很多个虚拟机,每个虚拟机里面你随便折腾,不会影响到物理机,也不会影响到其他虚拟机。
创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:做网站、网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的霍林郭勒网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
既然这么有用,那么Python里面用来创建虚拟环境的模块virtualenv是怎么使用的呢?我们一起来看一下。
这个模块比较简单,它只有一条命令,但是跟的选项比较多,就是通过不同的选项来控制生成不同的虚拟环境。我们先来简单看一下它的基本命令格式:
virtualenv [--version] [--with-traceback] [-v | -q] [--app-data APP_DATA] [--clear-app-data] [--discovery {builtin}] [-p py]
[--creator {builtin,cpython3-win,venv}] [--seeder {app-data,pip}] [--no-seed] [--activators comma_sep_list][--clear]
[--system-site-packages] [--copies] [--download | --no-download] [--extra-search-dir d [d ...]] [--pip version]
[--setuptools version] [--wheel version] [--no-pip] [--no-setuptools] [--no-wheel]
[--symlink-app-data] [--prompt prompt] [-h]
dest
乍一看,选项怎么这么多,一下子就能把人看晕,这还怎么学。但是在最开始使用的时候,常用的参数就只有下面两个:
参数比较抽象,我们还是通过具体的例子来实践,
先打开cmd命令行窗口,执行python命令,确认你的python包安装正确。如下所示:
C:\Users\Administrator>python
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
然后我们来安装好virualenv模块,命令是:
C:\Users\Administrator>pip install virtualenv
Looking in indexes: http://pypi.doubanio.com/simple
Collecting virtualenv
Downloading http://pypi.doubanio.com/packages/c1/61/7506ddd79ef6f09beeefb81c4c55bf395a8ad96b33ff1c6b06e40f8aa101/virtualenv-20.0.7-py2.py3-none-any.whl (8.0 MB)
|████████████████████████████████| 8.0 MB 6.8 MB/s
......
Installing collected packages: virtualenv
Successfully installed virtualenv-20.0.7
中间省略了一部分输出容,但是可以看到virtualenv模块安装成功。然后我们就来创建一个新的虚拟环境:
C:\Users\Administrator>virtualenv myproject
created virtual environment CPython3.7.3.final.0-64 in 6317ms
creator CPython3Windows(dest=C:\Users\Administrator\myproject, clear=False, global=False)
seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=C:\Users\Administrator\AppData\Local\Temp\tmpsvdy5dr2\seed-app-data\v1)
activators BashActivator,BatchActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
这里的虚拟环境目录名词是myproject,就这么简单的命令创建了一个虚拟环境。它位于myproject目录下。创建过程中如果没有报错就说明创建成功,同时它还指出了虚拟环境的Python版本,可以看到,就是我们系统当前安装的虚拟版本。
我们查看一下这个目录:
C:\Users\Administrator\dir myproject
2020/03/02 17:04 .
2020/03/02 17:04 ..
2020/03/02 17:04 Lib
2020/03/02 17:04 316 pyvenv.cfg
2020/03/02 17:04 Scripts
可以看到里面有两个目录和一个文件,
我们来尝试激活这个虚拟环境,命令如下:
# 切换到虚拟环境目录
C:\Users\Administrator>cd myproject
# 激活虚拟环境
C:\Users\Administrator\myproject>Scripts\activate
此时没有任何输出,而且命令提示符的窗口也没有任何改变,怎么判断虚拟环境已经激活成功了呢?我们使用pip命令来判断一下,:
C:\Users\Administrator\myproject>pip list
Package Version
---------- -------
pip 20.0.2
setuptools 45.2.0
wheel 0.34.2
可以看到,这个时候的pip安装的包只有三个,分别是pip、setuptools、wheel。而我们实际的系统环境因为我一直在使用,我重新打开一个命令提示符窗口,直接执行pip list命令结果如下:
C:\Users\Administrator>pip list
Package Version
------------------ ---------
-ip 19.0.3
appdirs 1.4.3
attrs 19.3.0
backcall 0.1.0
bleach 3.1.0
colorama 0.4.3
decorator 4.4.1
defusedxml 0.6.0
distlib 0.3.0
Django 2.2
....
说明我们的虚拟环境确实激活成功了,只是看起来不明显。但是这个时候虚拟环境确实已经可以使用了。那么使用完毕后该怎么退出呢?启动是activate,那么退出就是deactivate。如下所示:
C:\Users\Administrator\myproject>Scripts\deactivate.bat
C:\Users\Administrator\myproject>pip list
Package Version
------------------ ---------
-ip 19.0.3
appdirs 1.4.3
attrs 19.3.0
backcall 0.1.0
bleach 3.1.0
colorama 0.4.3
decorator 4.4.1
defusedxml 0.6.0
distlib 0.3.0
Django 2.2
entrypoints 0.3
执行完deactivate命令后,再执行pip list命令,可以看到输出的是系统python的路径,这个时候说明已经从虚拟环境退出了。
但是这个过程确实不太明显,那么能不能把 虚拟环境弄的更明显一点呢,我们来看看--prompt这个选项的用法:
C:\Users\Administrator>virtualenv --prompt myproject2 myproject2
创建一个新的虚拟环境叫做myproject2,但是使用了--prompt myproject2的选项参数,我们再来尝试激活一下看看:
C:\Users\Administrator>cd myproject2
C:\Users\Administrator\myproject2>Scripts\activate
myproject2C:\Users\Administrator\myproject2>Scripts\deactivate.bat
C:\Users\Administrator\myproject2>
这个时候很明显就可以看到,在命令提示符前端出现了一个myproject2的提示,而当我们执行deactivate脚本后,提示符消失,说明回到了正常的环境。
这样就比较明显了。
上面的两个例子演示的是直接使用系统版本python安装的虚拟环境,既然是虚拟环境,那么python的版本能不能切换呢?我们来尝试一下-p选项的用法。
C:\Users\Administrator>virtualenv --prompt (myproject3) -p python3.8 myproject3
PEP-514 violation in Windows Registry at HKEY_LOCAL_MACHINE/PythonCore/2.7/InstallPath error: missing
RuntimeError: failed to find interpreter for Builtin discover of python_spec='python3.8'
在上面的示例中,我尝试创建以python3.8来创建myproject3这个项目,但是失败了。它在系统里没有找到python3.8的版本。
我们知道,在windows中,不同的python是可以安装在不同的目录中,但是你系统使用哪个版本,就把哪个版本的路径添加到系统的环境变量最前面即可。刚才的例子里看到我目前使用的主版本是3.7.3,这个时候如果想要使用python3.8来创建虚拟环境的话,就需要告知3.8版本的实际路径:
C:\Users\Administrator>virtualenv --prompt (myproject3) -p "D:\Program Files (x86)\Python38\python.exe" myproject3
created virtual environment CPython3.8.2.final.0-64 in 6798ms
creator CPython3Windows(dest=C:\Users\Administrator\myproject3, clear=False, global=False)
seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=C:\Users\Administrator\AppData\Local\Temp\tmpxuz4d8ys\seed-app-data\v1)
activators BashActivator,BatchActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
这个时候就可以创建成功了,这里有两点需要注意:
创建成功以后,我们尝试激活
C:\Users\Administrator>cd myproject3
C:\Users\Administrator\myproject3>Scripts\activate
(myproject3)C:\Users\Administrator\myproject3>python
Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 23:03:10) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
可以看到,确实是3.8.2版本的Python,此时新版本的虚拟环境创建成功。
基本用法就是这么两个,linux系统下的操作和这里的类似,大家可以自己去尝试一下,如果有遇到什么问题可以留言和阿飞一起讨论。
实际使用的其他参数可以看一下下面的参数解析,写的比较详细,大家可以根据自己的需要来查看。
如果将virtualenv的所有参数进行分类,主要分为下面几类:
最后两个选项这里要解释一下,信息输出等级指的是virtualenv在执行命令过程中输出的信息等级,分为5个类,对应的值分别是:
也就是说-q/--quit
是将信息级别设置为CRITICAL
,即只有灾难级信息才会输出,-v/--verbose
后面跟上对应的值,即可调整对应的信息级别。例如-v 4
,即将信息级别调整为DEBUG级别。
即在使用virualenv命令的时候全局通用的配置,主要有:
发现这个配置是用来查找目标Python解释器的,当你创建虚拟环境的时候,你的虚拟环境以哪个Python解释器版本作为模板来创建呢?这个时候就需要用到发现这个组件来查找了。对应的选项有:
{实现名称}{版本}{架构}
,例如python3.8.1, cpython3等。创造器在virtualenv里的作用是,实际执行虚拟环境创建过程的工具。它对应的选项有:
种子器指的是什么呢?我们知道python的包管理软件是pip,但是还有另外两个管理软件,分别是setuptools和wheel。而种子器就是决定虚拟环境中,安装这三个软件中的哪几个。有了包管理软件,才能安装更多的包。就像种子发芽成熟后能结出更多的种子。所以叫seeder这样一个名字。对应的选项有:
虚拟环境配置好以后,我们怎么进入到虚拟环境,以及怎么让虚拟环境里的配置生效呢?这个时候就需要用到启动器了,启动器的作用是,在shell或者系统的环境变量里面,把虚拟环境的可执行命令路径添加到最前面。保证在虚拟环境中,最先找到的命令是虚拟环境里的命令。同样的,当虚拟环境用完以后,我们需要回到正常的环境,这个时候还需要提供虚拟环境的关闭功能。这两个功能都是在启动器里实现的。它对应的配置选项有: