跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python

Python 虚拟环境 venv 全面使用指南

Python 虚拟环境 venv 的使用方法。内容包括虚拟环境的背景、发展历史及必要性,解释了如何解决依赖冲突和污染全局环境。提供了跨平台(Windows, macOS, Linux)的核心命令速查表和详细操作步骤,涵盖创建、激活、安装包、导出依赖及删除环境。此外,还介绍了进阶用法如指定 Python 版本、继承系统包,以及在实际场景如 Django 开发和数据科学中的应用。文章最后列出了常见陷阱(如忘记激活、提交到 Git、移动环境等)的避坑指南,并总结了最佳实践,强调每个项目应使用独立环境并锁定依赖版本。

NodeJser发布于 2026/3/29更新于 2026/7/2147 浏览
Python 虚拟环境 venv 全面使用指南

在这里插入图片描述

📝 摘要

Python 虚拟环境(Virtual Environment)是 Python 开发中不可或缺的隔离机制。它允许你在同一台机器上为不同项目创建独立的隔离的 Python 运行环境,每个环境拥有自己的解释器、第三方库和配置文件,彻底有效解决了依赖地狱 (依赖冲突) 问题。本指南基于官方 venv 模块,结合跨平台实战经验,从背景历史到进阶技巧,全方位解析虚拟环境的创建、管理、依赖处理及避坑指南。

📌 一、背景、发展历史与方向

1. 为什么需要虚拟环境?

在 Python 开发中,不同项目往往依赖不同版本的库:

  • 项目 A:需要 Django 3.2
  • 项目 B:需要 Django 4.0
  • 全局环境:只能安装一个版本,导致冲突。

虚拟环境的作用:

  1. 项目隔离:每个项目拥有独立的依赖树,互不干扰,确保不同项目的依赖互不干扰。
  2. 避免污染:防止全局 Python 环境被实验性包破坏,保持系统 Python 的稳定性。
  3. 依赖管理:通过 requirements.txt 精确记录和复现环境,轻松在其他机器上复现完全一致的开发环境。
  4. 安全测试:放心测试新库,不影响其他项目或系统工具,可以在隔离环境中安全地测试新库或升级操作,失败只需删除环境即可,不影响系统。

2. 发展历史

  • 早期痛点: 在虚拟环境工具出现之前,所有 Python 项目共享系统全局的 site-packages。如果项目 A 需要 Django 2.0,而项目 B 需要 Django 4.0,开发者将无法在同一台机器上同时开发这两个项目,强行安装会导致版本冲突(Dependency Hell)。
  • virtualenv 时代: 早期社区主要依赖第三方工具 virtualenv 来解决这一问题,它功能强大但需要额外安装。
  • venv 的诞生 (Python 3.3+): 为了标准化和简化流程,Python 3.3 引入了内置模块 venv (PEP 405)。它成为了官方推荐的标准工具,无需额外安装即可使用,轻量且稳定。
  • 现代生态: 如今,venv 是日常开发的首选,而 conda 则在数据科学领域占据主导,poetry 和 pipenv 等工具则在依赖管理层面提供了更高级的封装。
  • Python 2.x 时代:主要依赖第三方工具 virtualenv(由 Ian Bicking 开发)。
  • Python 3.3+ (2012):PEP 405 被接受,venv 模块作为标准库内置,无需额外安装。
  • Python 3.4+:ensurepip 模块加入,虚拟环境默认包含 pip。
  • 现代趋势:venv 成为官方推荐标准,virtualenv 主要用于兼容旧版本或特殊需求;conda 在数据科学领域流行。

3. 发展方向

  • 更轻量级:减少基础镜像大小。
  • 更好的集成:与 IDE(VS Code, PyCharm)深度整合。
  • 可复现性:结合 pip-tools, Poetry, Pipenv 等工具实现更严格的依赖锁定。
  • 标准化: 成为所有 Python 项目的标准配置(通常命名为 .venv)。
  • 集成化: 现代 IDE (VS Code, PyCharm) 自动识别并集成 venv 管理。
  • 轻量化: 相比 Conda,venv 更专注于 Python 包本身,启动更快,占用更小。

🔧 二、基本语法结构与跨平台操作

1. 核心命令速查表

操作Windows (CMD/PowerShell)macOS / Linux
创建环境python -m venv .venvpython3 -m venv .venv
激活环境.venv\Scripts\activatesource .venv/bin/activate
退出环境deactivatedeactivate
安装包pip install <package>pip install <package>
查看已安装包pip listpip list
导出依赖pip freeze > requirements.txtpip freeze > requirements.txt
安装依赖pip install -r requirements.txtpip install -r requirements.txt
删除环境rmdir /s /q .venvrm -rf .venv

💡 命名约定:业界通常将虚拟环境命名为 .venv(加点表示隐藏目录),并在 .gitignore 中忽略它。

2. 详细操作步骤

Step 1: 检查 Python 版本

确保安装了 Python 3.3+(推荐 3.8+)。

python3 --version
# 或 Windows python --version
Step 2: 创建虚拟环境

Python 3.3+ 内置 venv 模块,无需安装。

通用命令:

python3 -m venv <环境名称>

注:在 Windows 上,如果 python3 不可用,请尝试 python。

常用命名约定:

  • .venv: 最推荐的命名,以 . 开头表示隐藏文件夹,保持目录整洁。
  • venv: 传统命名。
  • env: 简短命名。

示例:

mkdir my_project
cd my_project
python3 -m venv .venv

进入项目目录,执行创建命令:

# macOS/Linux
python3 -m venv .venv
# Windows
python -m venv .venv

目录结构解析:

  • bin/ (Unix) 或 Scripts/ (Windows):存放激活脚本和解释器。
  • Lib/ 或 lib/:存放安装的第三方库。
  • pyvenv.cfg:配置文件,指向基础 Python 解释器。
Step 3: 激活虚拟环境 (关键步骤)

激活后,命令行提示符前会出现环境名称(如 (.venv)),此时所有的 python 和 pip 命令都指向虚拟环境内部。

macOS / Linux:

source .venv/bin/activate

Windows (CMD):

.venv\Scripts\activate

Windows (PowerShell):

.venv\Scripts\Activate.ps1

注:若 PowerShell 提示执行策略错误,可能需要以管理员身份运行需运行 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser。

激活成功标志:命令行前出现 (.venv) 前缀。

(.venv) user@machine:~/my_project$
Step 4: 管理与安装包

激活后,python 和 pip 命令自动指向虚拟环境内部。

# 安装单个包
pip install requests
# 安装多个包
pip install requests pandas numpy
# 安装指定版本
pip install django==3.2.12
# 查看已安装包
pip list
# 升级 pip
pip install --upgrade pip
Step 5: 导出与复现依赖

导出依赖文件:

pip freeze > requirements.txt

复现 (从文件安装依赖)(在新机器或新环境中):

pip install -r requirements.txt

提示:国内用户可使用镜像源加速:pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

Step 6: 退出虚拟环境

退出:完成工作后,随时可以退出:

deprecate

退出后,命令行提示符恢复正常,python 和 pip 回归系统全局版本。

Step 7: 删除虚拟环境

虚拟环境只是一个文件夹,删除它即删除了环境。

  • 确保先退出环境: deactivate

Windows (PowerShell):

Remove-Item -Recurse -Force .venv

Windows (CMD):

rmdir /s /q .venv

macOS / Linux:

rm -rf .venv

🌟 三、进阶使用与实际场景

1. 指定 Python 版本创建环境

若系统安装了多个 Python 版本(如 3.8, 3.9, 3.10),可指定解释器:

# 使用 Python 3.8 创建环境
python3.8 -m venv .venv38
# 激活后检查版本
source .venv38/bin/activate
python --version
# 输出:Python 3.8.x

2. 继承系统包 (System Site Packages)

默认情况下,虚拟环境无法访问全局安装的包。如果需要(例如全局安装了某些难以编译的系统级库),可以使用 --system-site-packages。

python3 -m venv --system-site-packages .venv

⚠️ 慎用:可能破坏隔离性。警告:这会破坏环境的纯净性,通常不推荐,除非明确知道自己在做什么。

3. 不带 pip 的环境

用于构建极度精简的环境(较少见)。极简模式,手动安装 pip:

python3 -m venv --without-pip .venv

4. 实际场景:Django 项目开发

# 1. 创建项目目录
mkdir my_blog && cd my_blog
# 2. 创建并激活环境
# macOS/Linux
python3 -m venv .venv
source .venv/bin/activate
# Windows CMD
# python -m venv .venv
# .venv\Scripts\activate.bat
# Windows PowerShell
# python -m venv .venv
# .venv\Scripts\Activate.ps1
# 3. 升级 pip (好习惯,避免安装旧版包)
pip install --upgrade pip
# 4. 安装 Django
pip install django==4.2
# 5. 创建 Django 项目 (注意末尾的 . 表示在当前目录)
django-admin startproject config .
# 6. 【可选】创建第一个 App (这才是开发步骤,而不是重复 startproject)
python manage.py startapp blog
# 7. 开发阶段...
# (在此阶段你可能还会安装其他包,例如:pip install Pillow)
# echo "Hello World" >> blog/views.py (模拟写代码)
# 8. 开发完成后,统一导出所有依赖 (覆盖之前的记录)
pip freeze > requirements.txt
# 9. 运行开发服务器测试
python manage.py runserver
# 10. 完成工作,退出环境
deprecate
# ==========================================
# 同事协作场景 (拉取代码后)
# ==========================================
# 同事只需运行:git clone <你的仓库地址>
cd my_blog
# 1. 创建环境
python3 -m venv .venv
# 2. 激活环境
source .venv/bin/activate
# Windows 对应用户的命令
# 3. 一键还原所有依赖 (包括 Django 和你后来加的 Pillow 等)
pip install -r requirements.txt
# 4. 运行
python manage.py runserver

5. 实际场景:数据科学环境

# 创建专门用于数据分析的环境
python3 -m venv data-env
source data-env/bin/activate
# 安装重型科学计算库
pip install numpy pandas scikit-learn matplotlib jupyter
# 启动 Jupyter Notebook
jupyter notebook

6: IDE 集成 (VS Code / PyCharm)

  • VS Code: 打开项目后,右下角点击 Python 版本号,选择 .venv/bin/python,IDE 会自动识别并使用该环境进行 linting 和调试。
  • PyCharm: 新建项目时直接选择 'New environment using Virtualenv',IDE 会自动处理创建和激活过程。

⚠️ 四、致命陷阱与避坑指南

陷阱 1:忘记激活环境

这是新手最常犯的错误。在未激活环境下安装的包会进入全局环境,导致虚拟环境失去意义。

  • 检查方法: 看命令行前是否有 (.venv) 前缀,或运行 which python (Linux/Mac) / where python (Windows) 确认路径是否指向 .venv 目录。

现象:安装包到了全局环境,项目运行时却报错 ModuleNotFoundError。 解决:养成习惯,进入项目目录第一件事就是检查命令行是否有 (.venv) 前缀。

which python # Unix
where python # Windows
# 确认路径指向 .venv 目录

陷阱 2:将虚拟环境提交到 Git

虚拟环境包含大量二进制文件和特定路径配置,体积大且不可移植。

现象:仓库体积巨大,且在其他机器上因路径硬编码无法运行。 解决:务必在 .gitignore 中添加:

.venv/
venv/
env/
*.pyc
__pycache__/

陷阱 3:移动虚拟环境

虚拟环境中的许多脚本(如 activate 和 Shebang 行)包含绝对路径。

现象:将整个 .venv 文件夹复制到另一台电脑或不同路径,导致无法激活。 原因:虚拟环境中的脚本(如 activate)和解释器路径是硬编码的绝对路径。 解决:不要移动环境。如果项目移动了,删除旧的 .venv,在新位置重新创建并安装依赖。在新位置重新创建环境并 pip install -r requirements.txt。

陷阱 4:Windows PowerShell 激活失败

在 PowerShell 中运行 .venv\Scripts\activate 可能会报错:'在此系统上禁止运行脚本'。

现象:运行 Activate.ps1 提示'在此系统上禁止运行脚本'。 解决 - 1: 以管理员身份运行 PowerShell,执行 Set-ExecutionPolicy RemoteSigned,或者直接使用 .venv\Scripts\Activate.ps1。 解决 - 2:以管理员身份打开 PowerShell,执行:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

陷阱 5:依赖版本冲突

现象:requirements.txt 中未锁定具体版本(如只写了 requests 而非 requests==2.28.0),导致不同时间安装版本不一致。 解决:始终使用 pip freeze 生成带版本号的文件,或使用 pip-tools 进行更精细的管理。

陷阱 6:混淆 pip 和 pip3

现象:在某些 Linux 发行版中,pip 可能指向 Python 2,而 pip3 指向 Python 3。 解决:在虚拟环境激活后,直接使用 pip 即可(它会自动指向环境内的正确版本)。若未激活,建议使用 python3 -m pip。

陷阱 7: 混淆 requirements.txt 和 setup.py

  • requirements.txt: 用于锁定应用运行的确切环境(包含所有依赖及其版本),主要用于部署和开发环境复现。
  • setup.py / pyproject.toml: 用于定义库本身的元数据和依赖关系,主要用于发布包到 PyPI。
  • 建议: 应用项目主要维护 requirements.txt。

📚 五、学习资源推荐

1. 官方文档(最权威)

  • venv 模块文档:官方详细说明所有参数和用法。
  • pip 用户指南:学习依赖管理的最佳实践。
  • Python Packaging User Guide:全面了解 Python 打包和环境管理。

2. 经典书籍

书名作者相关章节/亮点
《Python 编程:从入门到实践》Eric Matthes第 16 章介绍虚拟环境与项目部署。
《流畅的 Python》Luciano Ramalho深入理解 Python 执行模型与环境上下文。
《Effective Python》Brett SlatkinItem 59: 使用虚拟环境隔离项目依赖。

3. 在线教程与文章

  • Real Python: Python Virtual Environments: A Primer (图文并茂,非常详细) - 深度解析虚拟环境的原理和最佳实践。
  • DigitalOcean: How To Install Python 3 and Set Up a Local Programming Environment on Ubuntu/macOS/Windows
  • Hitchhiker's Guide to Python: Installation of Python & Virtual Environments - 提供了多种工具的比较。
  • 菜鸟教程: Python 虚拟环境的创建 (基础入门快查)
  • 《Fluent Python》: 虽然侧重语言特性,但在环境配置部分也提到了最佳实践。
  • 《Two Scoops of Django》: 如果你使用 Django,这本书强烈建议使用虚拟环境,并给出了详细的项目结构建议。
  • 《Python Cookbook》: 包含关于环境管理和依赖处理的实用食谱。

4. 进阶工具文献

  • Poetry 文档: https://python-poetry.org/ (现代依赖管理与打包工具)
  • Pipenv 文档: https://pipenv.pypa.io/ (结合 pip 和 virtualenv 的工具)
  • PEP 405: Python Virtual Environments (虚拟环境的标准提案)

💡 六、最佳实践总结

  1. 一文一环境:每个独立项目都必须有专属虚拟环境。
  2. 命名规范:统一使用 .venv 作为目录名,方便 IDE 自动识别。
  3. 忽略提交:确保 .gitignore 中包含虚拟环境目录。
  4. 锁定版本:requirements.txt 必须包含具体版本号(==)。
  5. 定期清理:删除不再维护的项目的虚拟环境,释放磁盘空间。
  6. 自动化:在 CI/CD 流程中自动创建环境并安装依赖,确保测试一致性。

💡 建议: '虚拟环境不是可选项,而是 Python 开发的标配。从今天开始,告别全局安装,拥抱隔离与纯净!' 掌握 venv 是 Python 开发者的基本功。遵循 '每个项目一个环境'、'不提交环境目录'、'始终记录依赖' 这三条原则,能让你的开发之路更加顺畅,避免绝大多数依赖冲突问题。

掌握 venv,你就掌握了 Python 工程化的第一把钥匙。

目录

  1. 📝 摘要
  2. 📌 一、背景、发展历史与方向
  3. 1. 为什么需要虚拟环境?
  4. 2. 发展历史
  5. 3. 发展方向
  6. 🔧 二、基本语法结构与跨平台操作
  7. 1. 核心命令速查表
  8. 2. 详细操作步骤
  9. Step 1: 检查 Python 版本
  10. 或 Windows python --version
  11. Step 2: 创建虚拟环境
  12. macOS/Linux
  13. Windows
  14. Step 3: 激活虚拟环境 (关键步骤)
  15. Step 4: 管理与安装包
  16. 安装单个包
  17. 安装多个包
  18. 安装指定版本
  19. 查看已安装包
  20. 升级 pip
  21. Step 5: 导出与复现依赖
  22. Step 6: 退出虚拟环境
  23. Step 7: 删除虚拟环境
  24. 🌟 三、进阶使用与实际场景
  25. 1. 指定 Python 版本创建环境
  26. 使用 Python 3.8 创建环境
  27. 激活后检查版本
  28. 输出:Python 3.8.x
  29. 2. 继承系统包 (System Site Packages)
  30. 3. 不带 pip 的环境
  31. 4. 实际场景:Django 项目开发
  32. 1. 创建项目目录
  33. 2. 创建并激活环境
  34. macOS/Linux
  35. Windows CMD
  36. python -m venv .venv
  37. .venv\Scripts\activate.bat
  38. Windows PowerShell
  39. python -m venv .venv
  40. .venv\Scripts\Activate.ps1
  41. 3. 升级 pip (好习惯,避免安装旧版包)
  42. 4. 安装 Django
  43. 5. 创建 Django 项目 (注意末尾的 . 表示在当前目录)
  44. 6. 【可选】创建第一个 App (这才是开发步骤,而不是重复 startproject)
  45. 7. 开发阶段...
  46. (在此阶段你可能还会安装其他包,例如:pip install Pillow)
  47. echo "Hello World" >> blog/views.py (模拟写代码)
  48. 8. 开发完成后,统一导出所有依赖 (覆盖之前的记录)
  49. 9. 运行开发服务器测试
  50. 10. 完成工作,退出环境
  51. ==========================================
  52. 同事协作场景 (拉取代码后)
  53. ==========================================
  54. 同事只需运行:git clone <你的仓库地址>
  55. 1. 创建环境
  56. 2. 激活环境
  57. Windows 对应用户的命令
  58. 3. 一键还原所有依赖 (包括 Django 和你后来加的 Pillow 等)
  59. 4. 运行
  60. 5. 实际场景:数据科学环境
  61. 创建专门用于数据分析的环境
  62. 安装重型科学计算库
  63. 启动 Jupyter Notebook
  64. 6: IDE 集成 (VS Code / PyCharm)
  65. ⚠️ 四、致命陷阱与避坑指南
  66. 陷阱 1:忘记激活环境
  67. 确认路径指向 .venv 目录
  68. 陷阱 2:将虚拟环境提交到 Git
  69. 陷阱 3:移动虚拟环境
  70. 陷阱 4:Windows PowerShell 激活失败
  71. 陷阱 5:依赖版本冲突
  72. 陷阱 6:混淆 pip 和 pip3
  73. 陷阱 7: 混淆 requirements.txt 和 setup.py
  74. 📚 五、学习资源推荐
  75. 1. 官方文档(最权威)
  76. 2. 经典书籍
  77. 3. 在线教程与文章
  78. 4. 进阶工具文献
  79. 💡 六、最佳实践总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • C++ 继承机制:概念、定义与多继承处理
  • DeepSeek 各版本说明与优缺点分析
  • 基于 LangChain 实现数据库问答机器人
  • Windows 中 CMD 输入 python 命令跳转微软商店的解决方法
  • 使用 Ollama 本地部署 Llama-3.2-3B 进行文本生成
  • macOS 本地部署 OpenClaw 的 Docker 完整指南
  • AI 销售机器人拟人交互技术与代码实现
  • 文件的时间属性与时间戳管理
  • AI 编程新范式:LLM、Agent、MCP、Skill 协作机制解析
  • 高级 RAG 架构解析:提升大模型回答的准确性与可靠性
  • LeetCode 692. 前 K 个高频单词(Python 实现)
  • 程序员转型 AI 项目经理:核心素质与能力进阶指南
  • C++ 网络编程入门:TCP 协议下的简易计算器项目
  • DeepSeek-R1-Distill-Llama-70B:开源大模型推理性能分析
  • 基于多模态嵌入的 AI 搜索与 RAG 应用实现
  • C++ 继承进阶:友元、静态成员与菱形继承解析
  • VS Code C/C++ 开发环境配置指南
  • 2026 年高校 AIGC 检测新规:不同院校 AI 率标准解读
  • 38 岁俄罗斯程序员 20 年编码生涯的 16 条人生建议
  • OpenClaw Ubuntu 安装指南

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online