一文带你掌握Python自带venv虚拟环境

liftword5个月前 (12-15)技术文章58

前边几篇文章,我们介绍了如何使用 conda 管理 python 的虚拟环境。这时可能有人会有疑问,既然这个功能这么有用,那有官方提供的解决方案吗?其实是有的,在 python 3.3 版本及以后,python 中自带了 venv 模块,通过该模块可以快速方便的创建和维护虚拟环境。以下文章将详细介绍 python 中 venv 的使用。

venv 是什么

venv 是 python 的一个标准库中的一个模块,可以创建和管理 python 的虚拟环境。可以使每个项目的环境都是独立存在的,使每个项目都互不干扰,互不影响

没有 venv 是什么情况?

在 python 中,如果我们不设置虚拟环境,则 python 默认会使用全局环境(python 的实际安装目录),如果只是单纯的学习或者只有一个项目的时候,这不会有什么问题,然而如果我们现在存在多个项目,或则要调试不同的版本的第三方包就会有以下问题

  1. 不同项目之间相同第三方包版本不同
  2. 不同项目中的第三方包更新是否会相互影响
  3. 项目迁移时,环境无法迁移或者迁移繁琐
  4. 依赖混乱,项目所依赖的第三方库小于现有安装的库
  5. 三方库版本无法准确控制

使用虚拟环境

  1. 创建虚拟环境

使用如下命令创建项目的虚拟环境(在项目根目录执行)

python -m venv 虚拟环境名

如上代码中,我们可以通过命令行在代码文件夹中创建自定义的虚拟环境,一般虚拟环境都会按照 .venv 的名字命名,这样像 git 这样的代码版本工具会忽略对其的文件管理

可以看到,运行虚拟环境创建命令后,会生成一个.venv 的目录,包含 LibScripts 文件夹等。

  1. 启用当前虚拟环境
# 运行.venv目录下的active
.venv\Scripts\activate

如上图,运行完成后,可以看到 cmd 命令行前有当前虚拟环境的名字(.venv),此时表明已经在当前的虚拟环境了。

  1. 在当前环境安装第三方库
# 在当前虚拟环境下运行
pip install requests

如上图所示,我们在虚拟环境中安装 requests 包,可以看到在虚拟环境文件夹 .venv\Lib\site-packages 中就有了 requests 包和其依赖(使用 pip list 查看)。

  1. 卸载当前环境
# 当前虚拟环境下运行
.venv\Scripts\deactivate.bat

如上图所示,运行 deactivate.bat 就可以卸载当前虚拟环境,命令行前的(.venv)就没有了

导出和导入虚拟环境

当我们需要将项目做迁移或者给其他同事的时候,就需要告诉对方我们用了哪些三方库,且三方库的版本是多少。传统的方式,可能会写一个文档,记录当前项目中的信息,但是这样整理既麻烦,又不一定能保证准确,这时使用虚拟环境的导入和导出功能将给我们提供极大的方便。

  1. 导出环境配置(需要激活当前虚拟环境)
# 生成环境配置文件
pip freeze > requirements.txt

运行完成后会在项目根目录生产一个requirements.txt 的文件,内容如下:

可以看到,文件里包含了所有三方库的名字及其版本,这样在做项目迁移的时候,就可以将此文件带上,则可以非常容易的安装三方依赖。

  1. 导入环境配置

当我们拿到一个新的项目时,此时项目中还没有虚拟环境的目录,因此需要手工创建,创建完成后激活该虚拟环境(参照上边虚拟环境创建步骤)。

接下来就可以导入环境配置

# 当前虚拟环境下
pip install -r requirements.txt

如上图,运行完导入命令后,即可导入完成项目环境所要依赖的三方库(github 上很多开源项目都会携带requirements.txt 文件来描述所需的依赖)。

在 pycharm 中创建虚拟环境

pycharm使用虚拟环境非常方便,按照下方步骤即可轻松使用,当然能pycharm也默认使用虚拟环境。

  1. 新建带有 venv 的项目

如上图,在创建新项目的时候,选择 项目venv, 并选择本地 python 解释器

项目创建完成后,可以看到,目录中就会包含.venv 的文件夹。

  1. 导入带有requirments.txt 的项目

如上图,当导入带有requirments.txt 的项目时,pycharm 就会自动弹出提示框,创建虚拟环境,只需要点击确定即可完成创建和下载。

在 vs code 中创建虚拟环境

vs code没有pycharm那么自动化,但是也非常容易配置,步骤如下:

  1. 创建 venv 虚拟环境

如上图,在命令行输入 python: create environment 后,在选择 创建环境的选项。

选择 Venv 选项。

选择本地解释器。

创建项目成功后,即可看到.venv 命名的文件夹。

  1. 导入带有 requirments.txt 文件的项目

vs code 不会自动弹出创建虚拟环境选项,需要手动创建。

在命令行输入 python: create environment 后,在选择 创建环境的选项。

选择 Venv 选项。

选择本地解释器。

此时会显示 requirements.txt 文件的选项,勾选并确定。

此时 vs code 就会自动创建和下载项目的虚拟环境。

与 conda 区别

这时可能会有一个疑问,那究竟是使用 venv 呢?还是使用 conda 呢?两者有以下区别:

  1. venv 是 python 的标准库,在一些不允许安装额外软件的场景下,venv 是必然的选择。
  2. venv 更加轻量,但是只适用于管理项目的包,如果涉及到需要使用不同版本的 python,就需要借助 conda 来管理。
  3. 在 venv 环境中,不要将项目文件放到.venv 文件夹中,大多数情况,此目录会被 git 等屏蔽,有可能导致项目文件缺失,而 conda 不存在项目中的文件夹,所以对新手友好。

在实际使用上需要根据自身需求来选择,如果单纯的学习或者开发,使用 venv 是个很好选择。在工作中,要尽量根据公司的要求来设置,确保不会因为个体差异导致项目问题(开声讨大会很难受的[流泪])。

相关文章

怎么制作无限弹窗效果? 限弹窗代码bat文件分享

炸弹弹屏,也可以叫炸弹弹窗,是可以使用txt制作的一个小程序,效果就是执行程序后会一直不停地弹出窗口,就好像炸弹轰炸一样,如图所示,用来恶作剧很好玩。该怎么制作这个无限弹窗效果呢?下面我们就来看看详细...

python调用windowsapi发送系统通知

今天给大家介绍一个好玩的 python 库:plyer。如官方描述:Plyer 是一个独立于平台的 API,用于使用 Python 中各种平台(尤其是移动平台)上常见的功能。下面我们以发送通知作为演示...

读书笔记:第一个py程序 第一个程序是怎么写出来的

最近据说python挺火的,我也尝试一下学习python,每天进步一点,就当写读书笔记了,有需要的朋友源码自取。哈哈。今天的目标:编写人生第一个python小弹窗,实现正常弹窗且显示logo图标,并标...