99人参与 • 2026-05-15 • Python
虚拟环境是一个独立的 python 运行环境,它允许你在同一台机器上为不同的项目安装不同的包和版本,而不会相互干扰。每个虚拟环境都拥有自己的 python 解释器副本、pip 包管理器以及独立的第三方库目录。
虚拟环境主要解决 python 开发中的三个关键问题:
如果不使用虚拟环境,在全局安装不兼容的包可能导致系统工具不可用,严重时甚至需要重装操作系统。
venv 是 python 标准库自带的虚拟环境管理模块,从 python 3.3 开始引入。它无需额外安装,是 python 官方推荐的默认虚拟环境管理方式。
进入项目目录,执行以下命令创建虚拟环境:
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 可执行文件升级环境 |
激活方式因操作系统而异:
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) 标识。
在激活的虚拟环境中,像平常一样使用 pip:
pip install requests pandas numpy
这些包只会安装在当前虚拟环境中,可通过 pip list 验证:
pip list
将当前环境中的所有包及版本导出到文件:
pip freeze > requirements.txt
在新环境中通过该文件重建完全相同的依赖:
pip install -r requirements.txt
deactivate
提示符中的环境名会消失,后续操作将回到系统 python 环境。
virtualenv 是一个功能更强大的第三方虚拟环境管理工具,出现时间早于 venv。虽然需要单独安装,但它支持更旧的 python 版本(2.7+),并提供了更多的自定义选项和更快的环境创建速度。
pip install virtualenv
安装完成后,可以通过以下命令验证:
virtualenv --version
基本创建命令:
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) |
激活方式与 venv 完全相同:
linux / macos:
source myenv/bin/activate
windows:
.\myenv\scripts\activate
退出:
deactivate
与 venv 相同,激活环境后使用 pip 进行包管理:
pip install package_name pip freeze > requirements.txt
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 | 列出所有虚拟环境 |
conda 是一个跨平台、跨语言的包管理和环境管理系统。与 venv 和 virtualenv 的显著不同在于,conda 不仅可以管理 python 包,还能管理 r 包、c/c++ 库等任何类型的软件包,并且会自动处理包之间的复杂依赖关系。它通过安装预编译的二进制包来工作,这使得它在数据科学、机器学习和科学计算领域尤为流行。
可以从以下两种发行版中选择安装:
安装后,建议初始化 shell 并关闭自动激活 base 环境:
conda init bash # linux/macos conda config --set auto_activate_base false
重启终端后生效。
基本创建:
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
激活环境(适用于所有平台):
conda activate myenv
激活后终端提示符会显示环境名称。
退出环境:
conda deactivate
激活环境后,可以使用 conda 或 pip 安装包:
# 使用 conda 安装 conda install numpy pandas # 从特定 channel 安装(如 conda-forge) conda install -c conda-forge scipy # 使用 pip 安装 conda 仓库中不存在的包 pip install some-package
# 列出所有环境 conda env list # 查看当前环境信息 conda info --envs # 搜索可用的包版本 conda search pandas
导出环境到 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
conda env remove --name myenv
或使用 --all 删除环境及所有关联包:
conda remove -n myenv --all
conda 通过 channels 来获取包,常用的 channel 是 conda-forge(社区维护的庞大软件仓库)。配置 channel 优先级可以获得更稳定可靠的依赖解析:
# 添加 conda-forge channel conda config --add channels conda-forge # 设置严格 channel 优先级 conda config --set channel_priority strict
| 维度 | venv | virtualenv | conda |
|---|---|---|---|
| 来源 | python 标准库(内置) | 第三方工具(需安装) | 第三方工具(需安装) |
| 适用语言 | 仅 python | 仅 python | python、r、c/c++ 等多语言 |
| 包管理器 | pip | pip | conda + pip |
| 包类型 | python 包(源码/whl) | python 包(源码/whl) | 预编译二进制包(任何语言) |
| python 版本支持 | python 3.3+ | python 2.7+ / 3.x | 不限制 |
| 依赖解析 | pip 解析(较弱) | pip 解析(较弱) | conda 解析(较强,自动处理复杂依赖) |
| 创建速度 | 标准 | 较快(优化过) | 较慢(需下载二进制包) |
| 跨平台 | 是 | 是 | 是 |
| 环境位置 | 项目目录内 | 项目目录内 | 用户目录或自定义位置 |
| 场景 | 推荐工具 |
|---|---|
| 简单的 python 3 项目 | venv(内置,零配置) |
| 同时涉及 python 2 和 python 3 | virtualenv |
| 数据科学与机器学习项目 | conda(科学计算包集成度高) |
| 需要管理非 python 二进制依赖 | conda |
| 追求最小化安装和轻量化 | venv |
| 多语言混合项目(python + r 等) | conda |
| 快速原型开发 | venv 或 virtualenv |
| 生产环境部署需精确复现 | conda(yaml 环境文件)或 venv(requirements.txt) |
venv/、.venv/ 或 env/ 目录添加到 .gitignore 文件中,避免将虚拟环境提交到版本库。pip 或 conda 更新包,以获取安全修复和新功能。| 操作 | venv | virtualenv | conda |
|---|---|---|---|
| 创建环境 | python -m venv myenv | virtualenv myenv | conda create -n myenv python=3.10 |
| 激活环境 | source myenv/bin/activate(linux) | 同 venv | conda activate myenv |
| 退出环境 | deactivate | deactivate | conda deactivate |
| 安装包 | pip install pkg | pip install pkg | conda install pkg |
| 导出依赖 | pip freeze > requirements.txt | 同 venv | conda env export > environment.yml |
| 删除环境 | 删除目录即可 | 删除目录即可 | conda env remove -n myenv |
| 列出环境 | 无内置命令 | lsvirtualenv(需 wrapper) | conda env list |
到此这篇关于python 虚拟环境完全指南:venv、virtualenv 与 conda详解的文章就介绍到这了,更多相关python venv、virtualenv 与 conda内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论