当前位置: 代码网 > it编程>前端脚本>Python > Python 虚拟环境完全指南:venv、virtualenv 与 Conda详解

Python 虚拟环境完全指南:venv、virtualenv 与 Conda详解

2026年05月15日 Python 我要评论
1. 虚拟环境概述1.1 什么是虚拟环境虚拟环境是一个独立的 python 运行环境,它允许你在同一台机器上为不同的项目安装不同的包和版本,而不会相互干扰。每个虚拟环境都拥有自己的 python 解释

1. 虚拟环境概述

1.1 什么是虚拟环境

虚拟环境是一个独立的 python 运行环境,它允许你在同一台机器上为不同的项目安装不同的包和版本,而不会相互干扰。每个虚拟环境都拥有自己的 python 解释器副本、pip 包管理器以及独立的第三方库目录。

1.2 为什么需要虚拟环境

虚拟环境主要解决 python 开发中的三个关键问题:

  • 依赖隔离:每个项目拥有独立的包安装空间,安装某包的特定版本不会影响系统 python 或其他项目。
  • 版本管理:不同项目可以使用不同的 python 版本。一个机器学习项目可能需要 python 3.11 以获得更好性能,而遗留代码库可能需要 python 3.8 来兼容旧库。
  • 可复现性:通过导出依赖列表,团队成员可以在不同机器上精确复现同一套开发环境,消除"在我机器上可以运行"的问题。

如果不使用虚拟环境,在全局安装不兼容的包可能导致系统工具不可用,严重时甚至需要重装操作系统。

2. venv 模块详解

2.1 简介

venv 是 python 标准库自带的虚拟环境管理模块,从 python 3.3 开始引入。它无需额外安装,是 python 官方推荐的默认虚拟环境管理方式。

2.2 创建虚拟环境

进入项目目录,执行以下命令创建虚拟环境:

python -m venv myenv

该命令会创建一个 myenv 目录,其中包含:python 解释器的副本、标准库、pip 包管理器以及用于激活环境的脚本。

指定 python 版本:当系统存在多个 python 安装时,可以通过指定 python 版本来创建环境:

# 使用 python 3.11 创建虚拟环境
python3.11 -m venv myenv

venv 会使用所调用 python 解释器的版本来创建环境,因此只需调用对应的 python3.x 命令即可切换版本。

重要说明:venv 创建的虚拟环境会固定到创建时所使用的 python 版本。如需使用不同版本的 python,可以加载对应的 python 模块后再创建,或转而使用 conda。

常用创建选项

选项说明
--system-site-packages允许虚拟环境访问系统全局安装的包
--clear如果环境目录已存在,先清空再创建
--upgrade使用最新的 python 可执行文件升级环境

2.3 激活虚拟环境

激活方式因操作系统而异:

linux / macos

source myenv/bin/activate

windows command prompt

myenv\scripts\activate.bat

windows powershell

.\myenv\scripts\activate.ps1

激活成功后,终端提示符会显示环境名称,表明当前已进入虚拟环境:

(myenv) user@machine:~/project$

此后所有 pip install 命令安装的包都会指向该虚拟环境,而非系统 python。

验证激活是否成功:可以执行 pip list 查看依赖是全局还是当前环境,或查看命令行前面是否有 (myenv) 标识。

2.4 安装与管理包

在激活的虚拟环境中,像平常一样使用 pip:

pip install requests pandas numpy

这些包只会安装在当前虚拟环境中,可通过 pip list 验证:

pip list

2.5 导出与重建依赖

将当前环境中的所有包及版本导出到文件:

pip freeze > requirements.txt

在新环境中通过该文件重建完全相同的依赖:

pip install -r requirements.txt

2.6 退出虚拟环境

deactivate

提示符中的环境名会消失,后续操作将回到系统 python 环境。

3. virtualenv 工具详解

3.1 简介

virtualenv 是一个功能更强大的第三方虚拟环境管理工具,出现时间早于 venv。虽然需要单独安装,但它支持更旧的 python 版本(2.7+),并提供了更多的自定义选项和更快的环境创建速度。

3.2 安装 virtualenv

pip install virtualenv

安装完成后,可以通过以下命令验证:

virtualenv --version

3.3 创建虚拟环境

基本创建命令:

virtualenv myenv

这会创建一个与 virtualenv 自身相同 python 版本的虚拟环境。

指定 python 版本

virtualenv -p python3.10 myenv

或使用完整路径指定解释器:

virtualenv -p /usr/bin/python3.8 myenv

其他有用选项

选项说明
--no-pip创建不包含 pip 的环境(之后可单独安装)
--system-site-packages允许环境访问系统全局安装的包
--no-vcs-ignore不在环境目录中创建 vcs 忽略文件(如 .gitignore)

3.4 激活与退出

激活方式与 venv 完全相同:

linux / macos

source myenv/bin/activate

windows

.\myenv\scripts\activate

退出:

deactivate

3.5 安装与管理包

与 venv 相同,激活环境后使用 pip 进行包管理:

pip install package_name
pip freeze > requirements.txt

3.6 virtualenvwrapper 扩展

virtualenvwrapper 是一套基于 virtualenv 的扩展工具,提供了更方便的命令行接口来管理虚拟环境。

安装

pip install virtualenvwrapper

配置(在 ~/.bashrc~/.zshrc 中添加):

export workon_home=$home/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

常用命令

命令说明
mkvirtualenv myenv创建虚拟环境
workon myenv激活虚拟环境
deactivate退出虚拟环境
rmvirtualenv myenv删除虚拟环境
lsvirtualenv列出所有虚拟环境

4. conda 环境管理详解

4.1 简介

conda 是一个跨平台、跨语言的包管理和环境管理系统。与 venv 和 virtualenv 的显著不同在于,conda 不仅可以管理 python 包,还能管理 r 包、c/c++ 库等任何类型的软件包,并且会自动处理包之间的复杂依赖关系。它通过安装预编译的二进制包来工作,这使得它在数据科学、机器学习和科学计算领域尤为流行。

4.2 安装 conda

可以从以下两种发行版中选择安装:

  • anaconda:包含 conda、python 以及超过 150 个常用科学计算包,体积较大。
  • miniconda:仅包含 conda 和 python,体积小,用户可按需安装其他包。推荐有一定经验的用户使用。

安装后,建议初始化 shell 并关闭自动激活 base 环境:

conda init bash          # linux/macos
conda config --set auto_activate_base false

重启终端后生效。

4.3 创建虚拟环境

基本创建

conda create --name myenv

这会创建一个名为 myenv 的空环境。

指定 python 版本(最常见用法):

conda create --name myenv python=3.10

还可以指定版本范围:

conda create --name myenv "python>=3.10"

创建时同时安装包

conda create --name myenv python=3.10 numpy pandas matplotlib

指定包的精确版本

conda create --name myenv python=3.10 numpy=1.24 pandas=2.0

克隆现有环境

conda create --name newenv --clone oldenv

4.4 激活与退出

激活环境(适用于所有平台):

conda activate myenv

激活后终端提示符会显示环境名称。

退出环境

conda deactivate

4.5 安装与管理包

激活环境后,可以使用 conda 或 pip 安装包:

# 使用 conda 安装
conda install numpy pandas
# 从特定 channel 安装(如 conda-forge)
conda install -c conda-forge scipy
# 使用 pip 安装 conda 仓库中不存在的包
pip install some-package

4.6 环境列表与查看

# 列出所有环境
conda env list
# 查看当前环境信息
conda info --envs
# 搜索可用的包版本
conda search pandas

4.7 导出与重建环境

导出环境到 yaml 文件

conda env export --from-history > environment.yml

这会生成一个包含环境所有信息的 yaml 文件。

示例 environment.yml 文件

name: myproject
channels:
  - conda-forge
  - defaults
dependencies:
  - python=3.11
  - numpy=1.24
  - pandas=2.0
  - scikit-learn=1.3
  - matplotlib=3.7
  - jupyter
  - pip
  - pip:
    - pygwalker

从 yaml 文件重建环境

conda env create -f environment.yml

4.8 删除环境

conda env remove --name myenv

或使用 --all 删除环境及所有关联包:

conda remove -n myenv --all

4.9 管理 channels

conda 通过 channels 来获取包,常用的 channel 是 conda-forge(社区维护的庞大软件仓库)。配置 channel 优先级可以获得更稳定可靠的依赖解析:

# 添加 conda-forge channel
conda config --add channels conda-forge
# 设置严格 channel 优先级
conda config --set channel_priority strict

5. 三者对比分析

5.1 核心特性对比表

维度venvvirtualenvconda
来源python 标准库(内置)第三方工具(需安装)第三方工具(需安装)
适用语言仅 python仅 pythonpython、r、c/c++ 等多语言
包管理器pippipconda + pip
包类型python 包(源码/whl)python 包(源码/whl)预编译二进制包(任何语言)
python 版本支持python 3.3+python 2.7+ / 3.x不限制
依赖解析pip 解析(较弱)pip 解析(较弱)conda 解析(较强,自动处理复杂依赖)
创建速度标准较快(优化过)较慢(需下载二进制包)
跨平台
环境位置项目目录内项目目录内用户目录或自定义位置

5.2 功能维度详细对比

包管理范围

  • venv 和 virtualenv:主要关注 python 包的隔离,使用 pip 管理依赖,对于非 python 依赖(如系统级的 c 库)管理能力较弱。
  • conda:可以管理任何类型的包,包括 python 包、r 包、c/c++ 库、系统级工具等,并会自动处理跨语言的包依赖关系。conda 还可以直接安装 python 和 pip 这些基础工具,减少了环境初始配置时间。

性能与环境创建

  • virtualenv:通过符号链接和优化策略,创建速度比 venv 更快。
  • venv:作为内置模块,无额外依赖,启动和使用最为轻量。
  • conda:创建环境时需下载二进制包,速度相对较慢,但环境一旦建立后管理高效。

python 版本兼容性

  • venv:仅支持 python 3.3 及以上版本,不支持 python 2。
  • virtualenv:对 python 2 和 python 3 都有良好支持,适合需要维护遗留项目的场景。
  • conda:不依赖系统 python 版本,可以在环境中安装任意版本 python,完全独立于系统安装。

5.3 适用场景分析

场景推荐工具
简单的 python 3 项目venv(内置,零配置)
同时涉及 python 2 和 python 3virtualenv
数据科学与机器学习项目conda(科学计算包集成度高)
需要管理非 python 二进制依赖conda
追求最小化安装和轻量化venv
多语言混合项目(python + r 等)conda
快速原型开发venvvirtualenv
生产环境部署需精确复现conda(yaml 环境文件)或 venv(requirements.txt)

6. 总结与建议

6.1 工具选择指南

  • 入门或简单项目:优先使用 python 内置的 venv。它零依赖、无需额外安装,完全满足大多数 python 项目的需求。
  • 需要兼容旧版本 python:选择 virtualenv。它是目前对 python 2.7 支持最好的虚拟环境工具,同时提供了更多的自定义选项和扩展工具(如 virtualenvwrapper)。
  • 数据科学、机器学习或科学计算领域:选择 conda。conda 对 numpy、scipy、scikit-learn 等科学计算包的二进制管理极其高效,可以避免编译 c 扩展带来的各种麻烦。此外,conda 通过 yaml 环境文件提供了强大的环境复现能力,非常适合团队协作和生产部署。
  • 需要管理非 python 依赖:无条件选择 conda。venv 和 virtualenv 的能力边界止于 python 生态,而 conda 可以管理任何类型的依赖。

6.2 最佳实践

  • 始终使用虚拟环境:为每个项目创建独立的虚拟环境,避免依赖冲突。
  • 使用 requirements.txt 或 environment.yml:将依赖列表纳入版本控制(git),确保团队环境一致。
  • 忽略环境目录:将 venv/.venv/env/ 目录添加到 .gitignore 文件中,避免将虚拟环境提交到版本库。
  • 合理选择环境位置:python 虚拟环境创建后不可移动,需提前规划好安装位置。
  • 定期更新依赖:在虚拟环境中定期使用 pipconda 更新包,以获取安全修复和新功能。
  • 在激活状态下操作:安装包或运行脚本前,务必确认虚拟环境已激活,避免将包意外安装到全局环境。

6.3 快速参考:三工具核心命令

操作venvvirtualenvconda
创建环境python -m venv myenvvirtualenv myenvconda create -n myenv python=3.10
激活环境source myenv/bin/activate(linux)同 venvconda activate myenv
退出环境deactivatedeactivateconda deactivate
安装包pip install pkgpip install pkgconda install pkg
导出依赖pip freeze > requirements.txt同 venvconda env export > environment.yml
删除环境删除目录即可删除目录即可conda env remove -n myenv
列出环境无内置命令lsvirtualenv(需 wrapper)conda env list

到此这篇关于python 虚拟环境完全指南:venv、virtualenv 与 conda详解的文章就介绍到这了,更多相关python venv、virtualenv 与 conda内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com