跳转至

虚拟环境的实现


1 venv​ 模块

1.1 安装

不需要安装,是 Python3.3 及以上版本内置标准模块

1.2 用法

1.2.1 创建环境

在vscode终端处新建一个git bash终端,cd到项目文件夹,输入以下指令:

1
python -m venv ENV_DIR

其中 ENV_DIR 是虚拟环境名字,一般用 .venv

1
python -m venv .venv

虚拟环境的目录树结构如下(Windows):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
.venv
    ├─pyvenv.cfg
    ├─Include
    ├─Lib
    │  └─site-packages
    │      ├─pip
    │      ├─pip-20.2.3.dist-info
    │      ├─pkg_resources
    │      ├─setuptools-49.2.1.dist-info
    │      ├─easy_install.py
    │      └─__pycache__
    └─Scripts
    │  └─activate
    │  └─activate.bat
    │  └─Activate.ps1
    │  └─deactivate.bat
    │  └─easy_install-3.9.exe
    │  └─easy_install.exe
    │  └─pip.exe
    │  └─pip3.9.exe
    │  └─pip3.exe
    │  └─python.exe
    │  └─pythonw.exe

pyvenv.cfg 是一个配置文件,包含三个参数:

  • home:指向运行命令的 Python 安装目录;
  • include-system-site-packages:是否使用系统 Python 环境中安装的包。默认是 false,即不使用;
  • version:Python 版本号。

1.2.2 激活环境

  • Windows (PowerShell)
1
.\.venv\Scripts\activate
  • Windows (bash)
1
source ./.venv/Scripts/activate

1.2.3 退出环境

1
source ./.venv/Scripts/deactivate

1.2.4 删除环境

删除环境安装目录就可以

1.2.5 管理包

在虚拟环境中可通过 pip 命令来进行管理,常用的包管理命令如下(以 requests 包为例):

  • 安装包:pip install requests
  • 升级包:pip install --upgrade requests
  • 卸载包:pip uninstall requests

此外,安装指定版本的包可通过命令 pip install requests\==2.18.4 实现。如果有多个包,可将包名及其对应的版本(中间用\==连接,不同包之间换行)写入一个名为 requirements.txt 的文件,然后通过如下命令安装:

1
pip install -r requirements.txt

同理,因为是在虚拟环境中,所以该环境中的安装的所有包都是开发需要用到的,没有其他项目的包,可以通过如下命令导出所有安装包的清单,方便后续复现或持续开发:

1
pip freeze > requirements.txt

2 Conda

2.1 安装

3 对比 venv​ 和 Conda

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/Stromboli/article/details/144319798

3.1 基本概念

3.1.1 Conda 虚拟环境

Conda 是一个开源的包管理和环境管理工具,支持多种语言的依赖管理,不仅限于 Python。它是 Anaconda 和 Miniconda 等数据科学工具的核心,广泛应用于数据科学和机器学习领域。

  • 环境管理:Conda 可以创建独立的环境,并为每个环境安装所需的包。
  • 包管理:除了管理 Python 包,Conda 还支持管理其他语言(如 R、Julia)的包。
  • 跨平台:Conda 支持 Windows、MacOS 和 Linux 操作系统。

3.1.2 Python venv​ 虚拟环境

Python venv 是 Python 官方提供的用于创建虚拟环境的工具。它在 Python 3.3 及更高版本中内置,因此不需要额外安装。

  • 环境管理:通过 venv​ 模块创建独立的 Python 环境。
  • 包管理:依赖管理需要通过 pip​ 来完成,不能像 Conda 那样管理其他语言的包。
  • 跨平台:支持在 Windows、MacOS 和 Linux 上创建虚拟环境。

3.2 主要区别对比

下面通过表格对比 Conda 虚拟环境和 Python venv 虚拟环境的主要区别:

特性 Conda 虚拟环境 Python venv​ 虚拟环境
包管理工具 Conda(支持 Python 及其他语言的包) pip(仅支持 Python 包)
跨语言支持 支持 Python、R、Julia 等多种语言 仅支持 Python
安装包的源 Conda 仓库 (Anaconda Repo) PyPI (Python Package Index)
支持的操作系统 Windows、MacOS、Linux Windows、MacOS、Linux
虚拟环境创建 conda create -n env_name python -m venv env_name
依赖解决 自动解决依赖冲突 需要手动处理依赖冲突
虚拟环境管理 conda activate env_name source env_name/bin/activate​ 或 .\env_name\Scripts\activate
包安装速度 相对较快,特别是在 Anaconda 镜像中 较慢,尤其是第一次安装包时
支持二进制包 提供预编译的二进制包 需要编译源代码(对于某些包如 NumPy、SciPy)
依赖版本管理 更强大的版本管理 简单的版本管理(通过 pip)
虚拟环境与全局环境的隔离 完全隔离,且可以管理多个语言的环境 仅隔离 Python 环境

3.3 优缺点分析

3.3.1 Conda 虚拟环境的优缺点

优点:

  1. 跨语言支持:Conda 不仅支持 Python,还能管理 R、Julia 等其他语言的依赖,适合跨语言的项目。
  2. 简化的依赖管理:Conda 会自动解决包的依赖关系和版本冲突,避免了开发者手动处理依赖问题。
  3. 预编译的二进制包:Conda 提供了预编译的二进制包,安装速度较快,尤其是对于科学计算包(如 numpy​、scipy​)更为便利。
  4. 集成化工具:Conda 提供了环境创建、包安装、版本管理等一体化的功能,便于管理和使用。

缺点:

  1. 较大的安装包:Conda 和 Anaconda 的安装包较大,占用较多的磁盘空间。
  2. 性能开销:由于 Conda 会管理所有的依赖,它的性能可能会低于使用 venv 的情况,特别是在安装包时。
  3. 生态局限:Conda 仓库中的包不如 PyPI 全面,某些 Python 库可能无法在 Conda 中找到。

3.3.2 Python venv​ 虚拟环境的优缺点

优点:

  1. 轻量级venv​ 是 Python 标准库的一部分,安装包较小,适合轻量级的项目。
    快速创建和激活:创建虚拟环境的命令非常简单,激活与退出也较为直接。
  2. 兼容性好venv​ 基于 pip​,可以与 PyPI 中的所有包兼容,几乎没有包的限制。

缺点:

  1. 依赖解决较弱:与 Conda 相比,venv​ 不会自动解决包的依赖冲突,可能需要手动处理复杂的版本依赖。
  2. 缺乏跨语言支持venv​ 仅支持 Python,不适用于需要跨语言环境的项目。
  3. 包安装速度较慢:由于没有预编译的二进制包,安装某些包时需要从源码编译,尤其是像 numpy​ 这样的大型包。

3.4 使用场景推荐

3.4.1 使用 Conda 虚拟环境的场景

  • 数据科学与机器学习:Conda 提供了包括 pandas​、numpy​、scikit-learn​、tensorflow​ 等常用数据科学和机器学习库的预编译包,适合需要频繁使用这些库的项目。
  • 跨语言项目:如果你的项目需要同时使用 Python 和其他语言(如 R、Julia),Conda 是一个很好的选择。
  • 依赖复杂的项目:如果项目中有多个依赖库,并且这些库的版本较为复杂,Conda 的自动依赖管理能够减少开发者的麻烦。

3.4.2 使用 Python venv​ 虚拟环境的场景

  • 纯 Python 项目:如果你的项目完全基于 Python,并且对依赖管理要求较低,venv​ 是一个非常轻量级且高效的选择。
  • 不依赖 Conda 包:如果你不需要使用 Conda 仓库中的包,且包管理没有特别复杂的依赖,venv​ 可以更加简洁。
  • 快速开发与部署venv​ 的创建和激活速度较快,适合快速开发和轻量级部署。

3.5 总结

  • Conda 是一个功能全面的环境管理工具,适合跨语言、多依赖的复杂项目,特别是在数据科学和机器学习领域。它通过自动解决依赖冲突、提供预编译包等方式,简化了开发者的工作。
  • Python venv 是一个轻量级的虚拟环境工具,适合纯 Python 项目,并且对包管理要求较低。对于依赖较简单的项目,venv​ 可以更快速、方便地创建和管理环境。