欢迎光临
我们一直在努力

Python 内置 venv 虚拟环境工具完全指南(附 uv 工具无缝升级教程)

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

一、venv 核心使用教程

(一)前提准备

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

# Ubuntu/Debian系列
sudo apt update && sudo apt install -y python3-venv

(二)核心操作详解

  • 创建虚拟环境(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 ,tensorrt等),避免重复下载大型依赖包,节省磁盘空间和时间。

  • 推荐 –system-site-packages:为了全能:能直接使用 TensorRT、OpenCV(系统版,jetson设备系统预安装的OpenVv 支持cuda加速)、Jetson.GPIO 等预装库。

  • 一句话总结: 如果你只跑纯 PyTorch 模型,纯净环境是可行的;但如果你要开发典型的 Jetson 机器人应用(结合 TensorRT 加速、GPIO 控制、CSI 摄像头等),–system-site-packages 依然是必须要选的

    命令格式与示例:

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

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

    关键注意事项:

    • 继承时机:仅在虚拟环境创建时同步系统全局包,后续在系统全局安装的新包,不会自动同步到已创建的虚拟环境(需重新创建或手动在虚拟环境中安装);
    • 版本优先级:虚拟环境中通过 pip 安装的包,优先级高于继承的系统全局包(即若虚拟环境和系统全局安装了同一包的不同版本,会优先使用虚拟环境中的版本);
    • 兼容性风险:若系统全局包版本与项目需求冲突,可能导致项目报错,此时建议使用基础隔离模式创建虚拟环境,单独安装适配版本的依赖。
  • 查看虚拟环境核心逻辑:venv 创建的虚拟环境本质是普通文件夹,没有专属的查询命令,需通过系统的文件查询指令查看。
  • 不同系统操作:

    系统类型查看命令说明
    Linux/macOS ls 目录路径(默认当前目录直接输入 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/

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

    系统类型激活命令
    Linux/macOS source 环境名 /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 # 列出虚拟环境中的所有包(含继承的系统包和后续安装的包)

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

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

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

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

    系统类型删除命令 / 操作
    Linux/macOS rm -rf 环境名(示例:rm -rf my_project_venv_with_global)
    Windows 手动删除环境文件夹,或在 CMD/PowerShell 中执行 rd /s/q 环境名(示例:rd /s/q my_project_venv_with_global)

    (四)venv 核心总结

    操作命令格式关键说明
    基础隔离模式创建 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 参数则为大型依赖复用提供了便捷方案,可根据项目需求灵活选择~


    二、uv 包管理工具使用教程(兼容 venv,性能翻倍)

    uv 是基于 Rust 开发的现代化 Python 环境 + 包管理工具,一站式整合「虚拟环境管理 + 高性能包安装 + 依赖解析 + 依赖锁定」功能,完全兼容 venv 的所有操作逻辑,且速度是 venv+pip 组合的 10~100 倍。对于中大型项目、团队协作或追求开发效率的场景,uv 是 venv 的最优升级替代方案。

    (一)前提准备:安装 uv

    uv 需手动安装,但安装过程极简,支持所有系统和架构(包括 ARM64 架构如 Jetson 设备):

    系统类型安装命令补充说明
    Linux/macOS(含 ARM64) curl -LsSf https://astral.sh/uv/install.sh sh 官方推荐,一键安装二进制文件,无依赖
    Windows(PowerShell) irm https://astral.sh/uv/install.ps1 iex 官方推荐,自动配置环境变量
    所有系统(通用) python3 -m pip install uv –user 兼容现有 Python 环境

    # 临时使用清华镜像源安装uv(推荐)

    python3 -m pip install uv –user -i https://pypi.tuna.tsinghua.edu.cn/simple

    # 若清华源不行,换阿里云镜像源

    # python3 -m pip install uv –user -i https://mirrors.aliyun.com/pypi/simple/

    安装验证:重启终端后执行以下命令,输出版本号即安装成功:

    uv –version

    (二)核心操作详解(与 venv 无缝兼容,零学习成本)

    uv 的虚拟环境操作逻辑与 venv 完全一致,核心命令仅将 python3 -m venv 替换为 uv venv,激活、退出、查看、删除命令与 venv 完全相同,无需记忆新指令。

  • 创建虚拟环境(1)基础创建(默认隔离模式)命令格式:
  • # 基础命令:在当前目录创建名为【环境名】的虚拟环境(默认不继承系统全局包)
    uv venv 环境名

    示例:

    # 创建名为my_project_uv的虚拟环境(隔离模式,与venv目录结构一致)
    uv venv my_project_uv

    说明:uv 创建的虚拟环境文件夹与 venv 完全相同,包含 Python 解释器、pip 工具(可直接用 uv pip 替代),默认隔离系统全局包。

    若系统存在多个 Python 版本,可指定具体版本创建:

    uv venv –python python3.8 my_project_uv_38 # 使用Python3.8创建虚拟环境
    uv venv –python python3.10 my_project_uv_310 # 使用Python3.10创建虚拟环境

    (2)带 –system-site-packages 参数创建(继承系统全局包)uv 完全支持 venv 的 –system-site-packages 参数,作用和适用场景与 venv 一致,完美复用系统全局大型依赖包:命令格式与示例:

    # 带系统包继承的创建命令(与venv参数完全一致)
    uv venv –system-site-packages 环境名

    # 示例:创建继承系统全局包的uv虚拟环境
    uv venv –system-site-packages my_project_uv_with_global

    关键注意事项:与 venv 完全相同,仅在创建时同步系统包,虚拟环境内安装的包优先级高于继承的系统包。

  • 查看虚拟环境与 venv 完全一致!uv 创建的虚拟环境本质也是普通文件夹,通过系统命令 ls(Linux/macOS)、dir(Windows CMD)、Get-ChildItem(Windows PowerShell)查看即可。

  • 激活虚拟环境命令与 venv 完全相同! 无需修改任何操作习惯,激活后终端前缀同样显示环境名:示例(Linux/macOS):

  • # 激活uv创建的虚拟环境(命令与venv一致)
    source my_project_uv_with_global/bin/activate

    激活成功标识、验证方法与 venv 完全一致,可通过 which python3 或 pip list 验证。

  • 退出虚拟环境命令与 venv 完全相同! 所有系统通用:
  • deactivate

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

    与 venv 完全一致!uv 虚拟环境也是普通文件夹,直接删除对应文件夹即可:示例(Linux/macOS):

    rm -rf my_project_uv_with_global

    (四)uv 专属亮点:一站式高性能包管理(uv pip)

    uv 的核心优势在于内置高性能 pip 替代工具 uv pip,完全兼容 pip 的所有参数和用法,且速度提升 10~50 倍,支持依赖锁定、并行安装、智能依赖解析等高级功能。

  • 基础包安装(兼容 pip 所有命令)将 pip 替换为 uv pip 即可,无需修改任何参数:
  • # 安装单个包
    uv pip install requests

    # 安装指定版本包
    uv pip install pandas==2.1.0

    # 从requirements.txt安装依赖
    uv pip install -r requirements.txt

    # 安装私有源包
    uv pip install -i https://pypi.tuna.tsinghua.edu.cn/simple torch

  • 依赖锁定(团队协作必备)uv 支持生成规范的锁文件 uv.lock,记录完整依赖树和版本信息,确保团队所有成员环境一致:
  • # 从requirements.txt生成锁文件
    uv pip compile requirements.txt -o uv.lock

    # 基于锁文件安装依赖(确保环境100%一致)
    uv pip sync uv.lock

  • 性能优势在相同环境下,uv pip install 安装依赖的速度远快于 pip install,尤其是大型包或多依赖项目:
    • 安装 Pandas 等大型科学计算包:速度提升 10~20 倍;
    • 解析复杂依赖树(如 100+ 子依赖):速度提升 100+ 倍;
    • 团队协作同步环境:基于锁文件的 uv pip sync 比 pip install -r 快 5~10 倍。

    (五)uv 纯净环境的 pip 调用 “踩坑” 问题

    这是一个非常经典且容易 “踩坑” 的问题,特别是对于刚开始使用 uv 这种现代化工具的用户。uv 创建虚拟环境的逻辑与传统的 python -m venv 不同,它默认创建一个 **“纯净(Bare)”** 环境,不包含 pip、setuptools 或 wheel。以下是两种使用场景的详细解析:

    1. 结论速览

    若不运行 uv pip install pip,直接敲 pip 极大概率把包装到系统里,违背虚拟环境的初衷,务必小心!

    情况终端敲 pip install xxx 实际调用的程序包安装的位置评价
    未安装 pip 系统 Pip (/usr/bin/pip) 系统底层 (或 ~/.local) ❌ 危险:搞乱系统环境,包未装进虚拟环境
    已安装 pip 虚拟环境 Pip (.venv/bin/pip) 虚拟环境里 (.venv/lib/…) ✅ 正确:包被隔离在虚拟环境内
    2. 详细原理解析
    • 情况一:用 uv 创建环境后,未安装 pip运行 uv venv 并激活 (source .venv/bin/activate) 后,环境变量 PATH 会被修改,.venv/bin 被放在最前面,但 uv 默认环境中无 pip 可执行文件。Shell 在 .venv/bin 找不到 pip 时,会顺着 PATH 找到系统的 /usr/bin/pip。后果:终端提示符显示虚拟环境,但 pip 实际是系统的,包会装到 /usr/local/lib/python3.10/dist-packages(系统目录)或 ~/.local/lib/…(用户目录),完全绕过虚拟环境。验证方法:执行 which pip,输出路径为系统路径(如 /usr/bin/pip)。

    • 情况二:使用 uv pip install pip 安装后这是日志文件「传送阵.txt」中 test_no 环境的操作 1:uv pip install pip 会将 pip 下载并安装到虚拟环境的 bin 目录 (.venv/bin/pip)。此时输入 pip,Shell 会优先找到虚拟环境内的 pip。后果:pip 是虚拟环境私有,包会被正确安装到 .venv/lib/python3.x/site-packages。

    3. 最佳实践建议

    既然使用了 uv,建议改变使用习惯,避免混用 pip 命令,以获得最快的速度和最稳定的体验:

    • 推荐做法:完全不安装 pip,直接使用 uv 管理包(速度最快) uv pip install torch numpy # 直接装入当前激活的虚拟环境
    • 替代做法(习惯用 pip 时):先安装 pip 再使用 uv pip install pip # 先把 pip 装进虚拟环境
      pip install torch # 然后再用 pip

    ⚠️ 总结:若不运行 uv pip install pip,直接敲 pip 极大概率把包装到系统里,违背虚拟环境的初衷,务必小心!


    三、venv vs uv 核心对比表

    对比维度venvuv
    核心定位 Python 内置纯虚拟环境工具,无包管理能力 一站式环境 + 包管理工具,整合虚拟环境、包安装、依赖解析、锁定
    安装要求 Python 3.3+ 内置,无需安装(部分 Linux 需装 python3-venv) 需手动安装,支持所有系统和架构,安装极简
    创建命令(基础隔离模式) python3 -m venv 环境名 uv venv 环境名
    创建命令(继承系统包) python3 -m venv –system-site-packages 环境名 uv venv –system-site-packages 环境名
    激活命令 按系统选择对应命令(如 Linux:source 环境名 /bin/activate) 与 venv 完全相同
    退出命令 deactivate(通用) 与 venv 完全相同
    查看 / 删除方式 系统文件命令(ls/rm -rf 等) 与 venv 完全相同
    包管理能力 无,需搭配 pip 使用 内置 uv pip,完全兼容 pip,支持依赖锁定、并行安装
    性能表现 依赖 pip,速度一般,复杂依赖解析慢 Rust 编译,速度是 venv+pip 的 10~100 倍,依赖解析秒级完成
    依赖锁定 仅支持 pip freeze > requirements.txt(简陋快照) 支持生成规范 uv.lock 锁文件,团队协作环境一致
    系统兼容性 完美支持所有系统,无架构限制 完美支持所有系统和架构(包括 ARM64/Jetson)
    学习成本 低,仅需掌握基础环境操作 极低,兼容 venv 所有操作,仅需额外掌握 uv pip 命令
    适用场景 1. 离线环境无网络安装第三方工具;2. 简单小项目,仅需环境隔离;3. 追求零安装、零风险的极简需求 1. 中大型项目、深度学习 / 科学计算等多依赖场景;2. 团队协作项目,需要环境一致性;3. 追求极致开发效率,频繁安装 / 更新依赖;4. 所有 venv 适用场景(无缝替代)

    四、最终选型建议

  • 选 venv 的场景:

    • 设备无网络,无法安装 uv;
    • 仅需简单环境隔离,项目依赖极少;
    • 追求绝对零安装、零风险,无需高级包管理功能。
  • 选 uv 的场景:

    • 中大型项目、多依赖项目(如深度学习、Web 开发);
    • 团队协作,需要环境一致性和依赖锁定;
    • 频繁安装 / 更新依赖,追求开发效率;
    • 所有 venv 适用场景(uv 可无缝替代,且体验更优)。
  • 终极建议:可先通过 venv 理解虚拟环境的核心概念,掌握后立即切换到 uv——uv 完全兼容 venv 的操作逻辑,无需额外学习成本,却能带来性能和功能的双重提升,是现代 Python 开发的首选工具!

  • 赞(0)
    未经允许不得转载:171主机测评 » Python 内置 venv 虚拟环境工具完全指南(附 uv 工具无缝升级教程)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址