当前位置: 代码网 > it编程>前端脚本>Python > Python内置venv虚拟环境工具的使用完全指南

Python内置venv虚拟环境工具的使用完全指南

2025年12月30日 Python 我要评论
venv 是 python 3.3 + 自带的内置虚拟环境工具,无需额外安装,核心作用是为不同 python 项目创建隔离的运行环境,避免依赖包版本冲突。下面详细讲解它的创建、查看、激活、退出等核心操

venv 是 python 3.3 + 自带的内置虚拟环境工具,无需额外安装,核心作用是为不同 python 项目创建隔离的运行环境,避免依赖包版本冲突。下面详细讲解它的创建、查看、激活、退出等核心操作,同时覆盖不同系统的差异。

一、前提准备

确保你的系统已安装 python 3.3+(可通过 python3 --version 或 python --version 验证)。部分 linux 系统(如 ubuntu)默认未安装 venv 模块,需先执行以下命令安装依赖:

# ubuntu/debian系列
sudo apt update && sudo apt install -y python3-venv

二、核心操作详解

1. 创建虚拟环境

(1)基础创建(默认隔离模式)

命令格式:

# 基础命令:在当前目录创建名为【环境名】的虚拟环境(默认不继承系统全局包)
python3 -m venv 环境名

示例

# 创建名为my_project_venv的虚拟环境(隔离模式)
python3 -m venv my_project_venv

说明:执行命令后,当前目录会生成与 “环境名” 同名的文件夹,包含 python 解释器、pip 工具、依赖包存储目录等。默认情况下,虚拟环境是完全隔离的,不会使用系统全局安装的 python 包,所有依赖需重新通过 pip 安装。

若系统存在多个 python 版本(如 python3.8、python3.10),可指定具体版本创建:

python3.8 -m venv my_project_venv_38  # 使用python3.8创建虚拟环境
python3.10 -m venv my_project_venv_310  # 使用python3.10创建虚拟环境

(2)带 --system-site-packages 参数创建(继承系统全局包)

参数含义:

--system-site-packages 是 venv 的核心可选参数,作用是让创建的虚拟环境继承系统全局 python 环境中已安装的包(如系统全局安装的 numpy、tensorflow 等),避免重复下载大型依赖包,节省磁盘空间和时间。

适用场景:

  • 系统已全局安装某个大型库(如深度学习框架、科学计算库),多个项目需共用该库,无需重复安装;
  • 部分库依赖系统底层环境(如硬件驱动相关包),全局安装后需在虚拟环境中直接使用。

命令格式与示例:

# 带系统包继承的创建命令
python3 -m venv --system-site-packages 环境名

# 示例:创建继承系统全局包的虚拟环境(命名建议带标识,方便区分)
python3 -m venv --system-site-packages my_project_venv_with_global

关键注意事项:

  • 继承时机:仅在虚拟环境创建时同步系统全局包,后续在系统全局安装的新包,不会自动同步到已创建的虚拟环境(需重新创建或手动在虚拟环境中安装);
  • 版本优先级:虚拟环境中通过 pip 安装的包,优先级高于继承的系统全局包(即若虚拟环境和系统全局安装了同一包的不同版本,会优先使用虚拟环境中的版本);
  • 兼容性风险:若系统全局包版本与项目需求冲突,可能导致项目报错,此时建议使用基础隔离模式创建虚拟环境,单独安装适配版本的依赖。

2. 查看虚拟环境

核心逻辑:venv 创建的虚拟环境本质是普通文件夹,没有专属的查询命令,需通过系统的文件查询指令查看。

不同系统操作:

系统类型查看命令说明
linux/macosls 目录路径(默认当前目录直接输入 ls)列出指定目录下的文件夹,虚拟环境文件夹即为已创建的环境(如 my_project_venv)
windows(cmd)dir 目录路径(默认当前目录直接输入 dir)列出当前目录下的文件夹 / 文件,可见虚拟环境文件夹
windows(powershell)get-childitem(简写 gci)效果同 dir,更简洁的 powershell 指令

示例(linux/macos):

# 查看当前目录下的虚拟环境
ls
# 输出:my_project_venv  my_project_venv_with_global (两个虚拟环境文件夹)

# 查看指定目录下的虚拟环境(如~/projects/venvs/)
ls ~/projects/venvs/

3. 激活虚拟环境

激活后,终端会显示虚拟环境名称前缀(如 (my_project_venv)),此时通过 pip 安装的依赖会仅存于该环境(继承模式下,新增依赖仍安装在虚拟环境内,不影响系统全局)。

不同系统激活命令:

系统类型激活命令
linux/macossource 环境名 /bin/activate(示例:source my_project_venv_with_global/bin/activate)
windows(cmd)环境名 \scripts\activate.bat(示例:my_project_venv_with_global\scripts\activate.bat)
windows(powershell).\ 环境名 \scripts\activate.ps1(示例:.\my_project_venv_with_global\scripts\activate.ps1)

激活成功标识:终端前缀会新增 (环境名),例如:

  • linux/macos:(my_project_venv_with_global) user@localhost:~$
  • windows:(my_project_venv_with_global) c:\users\xxx\>

验证激活状态(可选):

# 查看当前python路径(指向虚拟环境内的python解释器)
which python3  # linux/macos
where python   # windows

# 查看当前pip路径(指向虚拟环境内的pip)
which pip3     # linux/macos
where pip      # windows

# 验证继承的系统包(继承模式下执行,可看到系统全局安装的包)
pip list  # 列出虚拟环境中的所有包(含继承的系统包和后续安装的包)

4. 退出虚拟环境

命令(所有系统通用):在已激活虚拟环境的终端中,直接输入以下命令,无需额外参数:

deactivate

退出成功标识:终端前缀的 (环境名) 消失,恢复到系统默认终端样式,此时操作会回到系统全局 python 环境。

三、补充操作:删除虚拟环境

venv 虚拟环境是普通文件夹,直接删除对应文件夹即可(删除后不可恢复,需谨慎操作):

系统类型删除命令 / 操作
linux/macosrm -rf 环境名(示例:rm -rf my_project_venv_with_global)
windows手动删除环境文件夹,或在 cmd/powershell 中执行 rd /s/q 环境名(示例:rd /s/q my_project_venv_with_global)

四、核心总结

操作命令格式关键说明
基础隔离模式创建python3 -m venv 环境名完全隔离系统全局包,依赖需重新安装,无版本冲突风险
继承系统包创建python3 -m venv --system-site-packages 环境名继承系统全局包,节省空间,注意版本兼容性
激活虚拟环境按系统选择对应命令(如 linux:source 环境名 /bin/activate)激活后终端带环境名前缀,操作仅作用于当前环境
退出虚拟环境deactivate所有系统通用,退出后回到全局 python 环境
查看虚拟环境ls(linux/macos)/ dir(windows)虚拟环境本质是文件夹,通过系统命令查看
删除虚拟环境rm -rf 环境名(linux/macos)/rd/s /q 环境名(windows)直接删除文件夹,需先退出虚拟环境,删除后不可恢复

venv 轻量、无额外依赖,是简单 python 项目环境隔离的首选工具。基础隔离模式适合大多数场景,--system-site-packages 参数则为大型依赖复用提供了便捷方案,可根据项目需求灵活选择~

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

(0)

相关文章:

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

发表评论

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