python虚拟环境模块venv使⽤及⽰例
相信只要学习python的同学对于虚拟环境这个概念肯定不会太陌⽣,虚拟环境指的是⼀个个单独隔离的python开发环境。各个虚拟环境之间互不⼲扰,
都有⾃⼰独⽴的开发包。就像是在电脑上装了很多个虚拟机,每个虚拟机⾥⾯你随便折腾,不会影响到物理机,也不会影响到其他虚拟机。
既然这么有⽤,那么Python⾥⾯⽤来创建虚拟环境的模块virtualenv是怎么使⽤的呢?我们⼀起来看⼀下。
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
乍⼀看,选项怎么这么多,⼀下⼦就能把⼈看晕,这还怎么学。但是在最开始使⽤的时候,常⽤的参数就只有下⾯两个:-p py ⽤于选择python解释器版本的
dest 要存放虚拟环境的⽬录,⼀般是项⽬⽬录
--prompt prompt 设置虚拟环境命令提⽰符前端提⽰。
参数⽐较抽象,我们还是通过具体的例⼦来实践,
⽰例
先打开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: pypi.doubanio/simple
Collecting virtualenv
Downloading pypi.doubanio/packages/c1/61/7506ddd79ef6f09beeefb81c4c55bf395a8ad9
6b33ff1c6b06e40f8aa101/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) activator
s BashActivator,BatchActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
这⾥的虚拟环境⽬录名词是myproject,就这么简单的命令创建了⼀个虚拟环境。它位于myproject⽬录下。创建过程中如果没有报错就说明创建成功,同时它还指出了虚拟环境的Python版本,可以看到,就是我们系统当前安装的虚拟版本。
我们查看⼀下这个⽬录:
C:\Users\Administrator\dir myproject
2020/03/02 17:04 <DIR> .
2020/03/02 17:04 <DIR> ..
2020/03/02 17:04 <DIR> Lib
2020/03/02 17:04 316 pyvenv.cfg
2020/03/02 17:04 <DIR> Scripts
可以看到⾥⾯有两个⽬录和⼀个⽂件,
Lib⽬录是必须的库⽂件⽬录,
Scripts是虚拟环境的⼆进制命令⽂件⽬录以及启动器所在⽬录。启动器就是待会我们要⽤来激活虚拟环境的⽬录。
pyvenv.cfg⽂件是这个虚拟环境的配置⽂件
我们来尝试激活这个虚拟环境,命令如下:
# 切换到虚拟环境⽬录
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)\" 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
这个时候就可以创建成功了,这⾥有两点需要注意:
1. 必须给出⽂件的绝对路径
2. 路径中如果有空格,则必须使⽤双引号括起。
创建成功以后,我们尝试激活
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的所有参数进⾏分类,主要分为下⾯⼏类:
1. 只⽤于输出信息的,包括下⾯⼏个:
--version 输出virtualenv版本信息
-h, --help 输出virtualenv帮助信息
--with-traceback,在创建虚拟环境失败的时候,输出追踪信息。
-v, --verbose,设置输出信息等级,⼀般⽤于增加信息输出等级,默认值是2
-q, --quit,设置输出信息等级,⼀般⽤于降低信息输出等级,默认值是0
最后两个选项这⾥要解释⼀下,信息输出等级指的是virtualenv在执⾏命令过程中输出的信息等级,分为5个类,对应的值分别是:
CRITICAL 0 灾难级信息
ERROR 1 错误级信息
WARNING 2 警告级信息
INFO 3 普通信息
DEBUG 4调试信息
NOTEST 5 ⾮测试信息
也就是说-q/--quit是将信息级别设置为CRITICAL,即只有灾难级信息才会输出,-v/--verbose 后⾯跟上对应的值,即可调整对应的信息级别。例如-v 4,即将信息级别调整为DEBUG级别。
2. 通⽤设置
即在使⽤virualenv命令的时候全局通⽤的配置,主要有:
--app-data APP_DATA ⽤于配置virutalenv使⽤的缓存⽬录,默认是<temp ⽬录>,对于windows系统通常
是%USERPROFILE%\AppData\Local\Temp这个⽬录,对于linux系统是/tmp⽬录。
--clear-app-data virtualenv启动的时候使⽤空的app数据⽬录,默认值False,即默认使⽤缓存⽬录,便于加快虚拟环境创建。
3. 发现
发现这个配置是⽤来查⽬标Python解释器的,当你创建虚拟环境的时候,你的虚拟环境以哪个Python解释器版本作为模板来创建呢?这个时候就需要⽤到发现这个组件来查了。对应的选项有:
--discovery {builtin} 解释器发现⽅法,默认值builtin,即内置的发现组件。现在好像只有这⼀个可以选择。也就是说,这个选项⽬前对于普通⽤户来说没什么⽤。除⾮你能够⾃⼰实现⼀个发现组件。
-p py, --python py,⽤于创建虚拟环境的⽬标python解释器,即以这个参数指定的python解释器版本来创建虚拟环境。默认值是你当前安装virutalenv的python解释器。它有两种格式,分别是:
I. python解释器的绝对路径。
II. python版本的字符串表⽰,字符串的格式是{实现名称}{版本}{架构},例如python3.8.1, cpython3等。
4. 创造器(creator)
创造器在virtualenv⾥的作⽤是,实际执⾏虚拟环境创建过程的⼯具。它对应的选项有:
--creator {builtin, cpyhon3-win, venv},即通过哪个python解释器来创建虚拟环境,默认是builtin,即安装virtualenv的python版本。
dest,即安装虚拟环境的⽬标⽬录,可以使⽤相对路径和绝对路径
--clear,当⽬标⽬录存在的时候,会移除⽬标⽬录,或者覆盖⽬标⽂件,默认值False
--system-site-packages,允许虚拟环境访问系统site-packages⽬录,默认值False
--copies, --always-copy,使⽤复制⽽不是链接来创建虚拟环境,即使平台的默认配置是使⽤链接的⽅式。默认值True。创建虚拟环境有两种⽅式,第⼀种是复制模板Python⾥的⽂件到虚拟环境中,第⼆种⽅式是从模板Python那⾥创建软链接到虚拟环境中,第⼆种速度更快,但是虚拟环境受到模板Python的影响也更⼤。因此⼀般推荐使⽤copy的⽅式。
5. 种⼦器(seeder)
种⼦器指的是什么呢?我们知道python的包管理软件是pip,但是还有另外两个管理软件,分别是setuptools和wheel。⽽种⼦器就是决定虚拟环境中,安装这三个软件中的哪⼏个。有了包管理软件,
python解释器下载才能安装更多的包。就像种⼦发芽成熟后能结出更多的种⼦。所以叫seeder这样⼀个名字。对应的选项有:
--seeder {app-data, pip},种⼦包安装⽅法,默认值app-data,即从缓存⽬录⾥安装。
--no-seed, --without-pip,即不安装种⼦包(默认值False)
--download 从PyPI上下载安装最新版本的pip/setuptools/wheel,默认值False
--no-download, --never-download,不下载最新版的pip/setuptools/wheel,默认值True
--extrea-search-dir,种除了默认的Python安装的包以外,种⼦器可能会使⽤的包含其他包的路径,默认值是[]
--pip version, --wheel version, --setuptools version,要安装的pip,wheel,setuptools版本,默认值都是latest
--no-pip,--no-wheel,--no-setuptools,不安装pip,wheel,setuptools,默认值都是False
--symlink-app-data,从app-data⽬录链接python包到虚拟环境(⽬前还不⽀持,要求种⼦pip>=19.3,默认值False)
6. 启动器(activator)
虚拟环境配置好以后,我们怎么进⼊到虚拟环境,以及怎么让虚拟环境⾥的配置⽣效呢?这个时候就需要⽤到启动器了,启动器的作⽤是,在shell或者
系统的环境变量⾥⾯,把虚拟环境的可执⾏命令路径添加到最前⾯。保证在虚拟环境中,最先到的命令是虚拟环境⾥的命令。同样的,当虚拟环境⽤完以后,我们需要回到正常的环境,这个时候还需要提供虚拟环境的关闭功能。这两个功能都是在启动器⾥实现的。它对应的配置选项有:
--activator comma_sep_list,要⽣成的启动器列表,⽤逗号分隔。因为你在不同的系统中使⽤的是不同的shell,例如linux中有bash、tcsh、dash、zsh等,windows中有powershell,cmd等。因此针对不同的环境需要使⽤不同的启动器。这个参数就是让你说明你要⽣成哪些环境的启动器。
--prompt prompt,在进⼊到虚拟环境的时候,⼀般都会在命令提⽰符的最前⾯标识出虚拟环境的名称,便于区分实际环境和虚拟环境。⽽这个名称就是通过这个参数来配置的。
到此这篇关于python虚拟环境模块venv使⽤及⽰例的⽂章就介绍到这了,更多相关python虚拟环境模块venv内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论