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: 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  <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)\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

这个时候就可以创建成功了,这里有两点需要注意:

  1. 必须给出python.exe文件的绝对路径
  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。而种子器就是决定虚拟环境中,安装这三个软件中的哪几个。有了包管理软件,才能安装更多的包。就像种子发芽成熟后能结出更多的种子。所以叫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内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 浅谈关于Python3中venv虚拟环境

    Python3.3以上的版本通过venv模块原生支持虚拟环境,可以代替Python之前的virtualenv. 该venv模块提供了创建轻量级"虚拟环境",提供与系统Python的隔离支持.每一个虚拟环境都有其自己的Python二进制(允许有不同的Python版本创作环境),并且可以拥有自己独立的一套Python包.他最大的好处是,可以让每一个python项目单独使用一个环境,而不会影响python系统环境,也不会影响其他项目的环境. 优点 使不同应用开发环境独立 环境升级不影响其他应

  • python3.6的venv模块使用详解

    今天,在在使用 pycharm 的使用,进行创建 python的时候,发现使用默认的创建的选项使用的python 3环境 .而我系统默认的python环境是 python 2.7 环境:这就引起了我的兴趣. 我打开pycharm 的终端,发现: 前面 有个 venv 参数,通过 调研了一番我发现:python 的 venv 模块可以创建一个独立的虚拟的python运行环境,这样就和系统的python独立开来了.而我使用fedora 28的系统,默认安装了python2.7 和 python3.6

  • python3利用venv配置虚拟环境及过程中的小问题小结

    在利用python进行flask等开发过程中经常需要配置虚拟环境以方便针对不同的项目需求配置不同的生产环境.在python3.3之前,需要利用virtualenv等工具来实现python虚拟开发环境的配置,在python3.3中加入了venv模块支持原生创建虚拟环境.但在python3.3版本中venv模块没有内置pip包,在3.4版本后加入了pip包,创立并激活虚拟环境后可直接使用.本篇以配置一个虚拟 环境并安装flask为例记录我自己配置虚拟环境的过程. 总的来说分为以下三步: 创建虚拟环境

  • Python3 venv搭建轻量级虚拟环境的步骤(图文)

    今天先聊一聊在windows/mac iOS系统下用venv搭建python轻量级虚拟环境的问题. 使用venv搭建的虚拟环境同virtualenv搭建的虚拟环境,即venv可替代virtualenv 1. 虚拟环境的作用是:搭建独立的python运行环境,不与其他产生冲突 就是说,安装在虚拟环境里的所有包,均不会对环境外的其他包产生影响,反之,在虚拟环境下运行时只能调用虚拟环境中安装的包,不会调用外部的包.比如,mac系统自带python2,我搭建了虚拟环境安装python3,那么我在虚拟环境

  • Ubuntu下使用python3中的venv创建虚拟环境

    1.虚拟环境跟随项目,为单个项目创建虚拟环境 (python3.4以上自带直接使用 ,pip install virtualenv) 1.建立项目目录:(找个目录) mkdir PythonProject cd PythonProject 2.创建虚拟环境env: python -m venv env 3.激活虚拟环境:source env/bin/acticate 4.安装包,创建py文件 pip install xxx 5.退出虚拟环境:deactivate 2.Virtaulenvwrap

  • CentOS7部署Flask(Apache、mod_wsgi、Python36、venv)

    一.安装Apache # yum install -y httpd httpd-devel # systemctl start httpd.service # 启动 # systemctl stop httpd.service # 关闭 # systemctl restart httpd.service # 重启 # systemctl enable httpd.service # 开机自启 防火墙开放80端口 # firewall-cmd --zone=public --add-port=80

  • python虚拟环境模块venv使用及示例

    相信只要学习python的同学对于虚拟环境这个概念肯定不会太陌生,虚拟环境指的是一个个单独隔离的python开发环境.各个虚拟环境之间互不干扰,都有自己独立的开发包.就像是在电脑上装了很多个虚拟机,每个虚拟机里面你随便折腾,不会影响到物理机,也不会影响到其他虚拟机. 既然这么有用,那么Python里面用来创建虚拟环境的模块virtualenv是怎么使用的呢?我们一起来看一下. virtualenv基本命令格式 这个模块比较简单,它只有一条命令,但是跟的选项比较多,就是通过不同的选项来控制生成不同

  • python Zmail模块简介与使用示例

    介绍 Zmail 使得在python3中发送和接受邮件变得更简单.你不需要手动添加服务器地址.端口以及适合的协议,zmail会帮你完成.此外,使用一个python字典来代表邮件内容也更符合直觉 安装 Zmail仅支持python3,不需要任何外部依赖. 不支持python2. pip3 install zmail 特性 自动寻找服务器地址以及端口 自动使用可靠的链接协议 自动将一个python字典映射成MIME对象(带有附件的) 自动添加头文件以及localhostname来避免服务器拒收你的邮

  • python difflib模块示例讲解

    difflib模块提供的类和方法用来进行序列的差异化比较,它能够比对文件并生成差异结果文本或者html格式的差异化比较页面,如果需要比较目录的不同,可以使用filecmp模块. class difflib.SequenceMatcher 此类提供了比较任意可哈希类型序列对方法.此方法将寻找没有包含'垃圾'元素的最大连续匹配序列. 通过对算法的复杂度比较,它由于原始的完形匹配算法,在最坏情况下有n的平方次运算,在最好情况下,具有线性的效率. 它具有自动垃圾启发式,可以将重复超过片段1%或者重复20

  • Python使用Turtle模块绘制五星红旗代码示例

    在Udacity上课时学到了python的turtle方法,这是一个很经典的用来教小孩儿编程的图形模块,最早起源于logo语言.python本身内置了这个模块,其可视化的方法可以帮助小孩儿对编程的一些基本理念有所理解. 在作业提交的论坛里看到很多turtle画出来的精美图形,想不出什么要画的东西,于是决定拿五星红旗来练练手. 前期准备 五星红旗绘制参数 Turtle官方文档 turtle的基本操作 # 初始化屏幕 window = turtle.Screen() # 新建turtle对象实例 i

  • Python random模块用法解析及简单示例

    用法示例: import random # 1)随机小数 print(random.random()) # 获取大于0且小于1 之间的小数 random.random() print(random.uniform(1, 4)) # 获取大于1小于3的小数 # 2)随机整数 print(random.randint(1, 9)) # 获取大于等于1且小于等于9之间的整数 print(random.randrange(1, 9)) # 获取大于等于1且小于9之间的整数 print(random.ra

  • Python pymongo模块用法示例

    本文实例讲述了Python pymongo模块用法.分享给大家供大家参考,具体如下: MongoDB优点 MongoDB是一个为当代web应用而生的noSQL数据库,它有如下优点: 1.文档型存储.可以把关系型数据库的表理解为一个电子表格,列表示字段,每行的记录其实是按照列的字段顺序排列的值得元组.而存储在MongoDB中的文档被存储为键-值对的形式,值却可以是任意类型且可以嵌套.之前在用关系型数据库的时候,我们把产品信息打散到不同的表中,要通过关系表或者使用join拼接成复杂的SQL语句的方式

  • Python paramiko模块的使用示例

    paramiko模块提供了ssh及sft进行远程登录服务器执行命令和上传下载文件的功能.这是一个第三方的软件包,使用之前需要安装. 1 基于用户名和密码的 sshclient 方式登录 # 建立一个sshclient对象 ssh = paramiko.SSHClient() # 允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 调用c

  • Python常用模块logging——日志输出功能(示例代码)

    用途 logging模块是Python的内置模块,主要用于输出运行日志,可以灵活配置输出日志的各项信息. 基本使用方法 logging.basicConfig(level=logging.DEBUG, format='levelname:%(levelname)s filename: %(filename)s ' 'outputNumber: [%(lineno)d] thread: %(threadName)s output msg: %(message)s' ' - %(asctime)s'

  • Python random模块的使用示例

    常用的 random 模块方法 import random # random.random()用于生成一个 0 到 1 的随机浮点数: 0 <= n < 1.0 print(random.random()) # 0.18246795790915304 # random.randint(a, b),用于生成一个指定范围内的整数. # 其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b print(random.randint(1, 10)) # 8 # rand

  • Python ConfigParser模块的使用示例

    前言 在做项目的时候一些配置文件都会写在settings配置文件中,今天在研究"州的先生"开源文档写作系统-MrDoc的时候,发现部分配置文件写在config.ini中,并利用configparser进行相关配置文件的读取及修改. 一.ConfigParser模块简介 该模块适用于配置文件的格式与windows ini文件类似,是用来读取配置文件的包.配置文件的格式如下:中括号"[ ]"内包含的为section.section 下面为类似于key-value 的配置

随机推荐