- 本节目标:理解虚拟环境的作用,并为当前仓库创建
.venv
1. 本节要解决的问题
上一节确认了本机 Python、pip、Git 都可用。本节要解决另一个非常重要的问题:不同 Python 项目的依赖不能混在一起。
本节完成结果:
| 项目 | 结果 |
|---|---|
| 虚拟环境目录 | .venv/ |
| 创建命令 | python -m venv .venv |
| 虚拟环境 Python | Python 3.14.2 |
| 虚拟环境 pip | pip 25.3 |
| Git 状态 | .venv/ 已被 .gitignore 忽略 |
2. 什么是虚拟环境
2.1 概念
虚拟环境是一个给某个项目单独使用的 Python 运行环境。
它里面通常包含:
- 一个项目专用的 Python 解释器入口。
- 一个项目专用的 pip。
- 一个项目专用的第三方包目录。
在 Windows 当前仓库中,虚拟环境路径是:
text
.venv/
虚拟环境里的 Python 路径是:
text
.venv/Scripts/python.exe
2.2 作用
虚拟环境解决的是"依赖隔离"问题。
假设你以后有两个项目:
text
项目 A 需要 requests 2.x
项目 B 需要 requests 3.x
如果都安装到全局 Python,两个项目可能互相影响。虚拟环境让每个项目有自己的依赖目录:
text
项目 A -> .venv-A -> requests 2.x
项目 B -> .venv-B -> requests 3.x
这样项目之间更稳定。
2.3 原理
虚拟环境不是复制一整个操作系统。它只是创建一套项目专用的 Python 入口和包安装目录。
可以理解成:
text
全局 Python
-> 创建 .venv
-> .venv 里有自己的 python.exe
-> .venv 里有自己的 site-packages
-> pip install 的包进入 .venv
site-packages 是 Python 安装第三方库的目录。激活虚拟环境后,pip install 安装的包会进入 .venv 的 site-packages,不会污染全局 Python。
3. 为什么不能把依赖都装到全局 Python
3.1 全局环境的问题
全局 Python 是电脑级别的 Python。所有项目都往里面装包,会产生几个问题:
- 包越来越多,不知道哪个项目需要哪个包。
- 包版本互相冲突。
- 删除一个包可能影响另一个项目。
- 换电脑后很难复现项目环境。
- 学习时很难判断某个包是项目依赖还是历史遗留。
3.2 虚拟环境的好处
虚拟环境能让项目更清晰:
- 每个项目单独管理依赖。
- 可以用
requirements.txt记录依赖。 - 换电脑后可以重新创建相似环境。
- Git 仓库只保存源码和依赖清单,不保存庞大的第三方包目录。
4. 创建虚拟环境
本仓库使用命令:
powershell
python -m venv .venv
逐段解释:
| 片段 | 含义 |
|---|---|
python |
启动 Python 解释器 |
-m |
以模块方式运行后面的模块 |
venv |
Python 标准库里的虚拟环境模块 |
.venv |
要创建的虚拟环境目录 |
python -m venv .venv 的意思是:让当前 Python 运行标准库 venv 模块,并在当前目录创建名为 .venv 的虚拟环境。
5. 验证虚拟环境
5.1 检查虚拟环境 Python 版本
命令:
powershell
.\.venv\Scripts\python.exe --version
当前结果:
text
Python 3.14.2
5.2 检查虚拟环境 pip
命令:
powershell
.\.venv\Scripts\python.exe -m pip --version
当前结果:
text
pip 25.3 from E:\work2026\workspace-main\python-learning-lab\.venv\Lib\site-packages\pip (python 3.14)
注意这里的路径包含 .venv,说明 pip 属于当前项目虚拟环境。
5.3 检查解释器路径
命令:
powershell
.\.venv\Scripts\python.exe -c "import sys; print(sys.executable)"
当前结果:
text
E:\work2026\workspace-main\python-learning-lab\.venv\Scripts\python.exe
这说明当前使用的是项目里的 Python 入口。
6. 激活虚拟环境
6.1 PowerShell 激活命令
在仓库根目录执行:
powershell
.\.venv\Scripts\Activate.ps1
激活后,命令行前面通常会出现:
text
(.venv)
这表示当前 shell 会优先使用 .venv 里的 Python 和 pip。
6.2 退出虚拟环境
命令:
powershell
deactivate
退出后,命令行不再优先使用 .venv。
6.3 如果 PowerShell 禁止激活脚本
有些 Windows 机器会提示脚本执行策略限制。学习阶段可以先不强行修改系统策略,而是直接使用虚拟环境里的 Python:
powershell
.\.venv\Scripts\python.exe your_script.py
这不需要激活,也能明确使用 .venv。
后面如果确实需要激活,再单独讲 PowerShell 执行策略。
7. 为什么不提交 .venv
.venv 目录通常很大,而且里面是本机生成的依赖文件,不适合放进 Git。
应该提交的是:
- 项目源码。
- 课件和文档。
- 依赖清单,例如后续的
requirements.txt。 - 测试代码。
不应该提交的是:
.venv/__pycache__/.pytest_cache/- 本地密钥文件。
本仓库 .gitignore 已包含:
text
.venv/
所以 Git 会忽略这个目录。
8. 本节命令汇总
| 目的 | 命令 |
|---|---|
| 创建虚拟环境 | python -m venv .venv |
| 查看虚拟环境 Python 版本 | .\.venv\Scripts\python.exe --version |
| 查看虚拟环境 pip | .\.venv\Scripts\python.exe -m pip --version |
| 查看虚拟环境解释器路径 | .\.venv\Scripts\python.exe -c "import sys; print(sys.executable)" |
| PowerShell 激活虚拟环境 | .\.venv\Scripts\Activate.ps1 |
| 退出虚拟环境 | deactivate |
9. 常见错误
9.1 把 .venv 提交到 Git
这是新手常见错误。.venv 是本机环境,不是源码。应该被 .gitignore 忽略。
9.2 没激活环境就安装依赖
如果没有激活虚拟环境,直接执行:
powershell
pip install pytest
可能会把包安装到全局 Python。
更稳的方式是:
powershell
.\.venv\Scripts\python.exe -m pip install pytest
这样一定使用当前项目 .venv 里的 pip。
同理,检查 pip 版本时也建议优先使用:
powershell
.\.venv\Scripts\python.exe -m pip --version
不要只看 pip --version,因为它可能来自 PATH 中的全局 Python。
9.3 不知道当前用的是哪个 Python
可以用:
powershell
python -c "import sys; print(sys.executable)"
如果路径里包含 .venv,说明当前 Python 来自虚拟环境。
9.4 删除 .venv 会不会删除代码
不会。.venv 只是依赖环境,不是项目源码。只要依赖清单还在,后面可以重新创建。
10. 当前项目中的应用
后续 Project 00 会继续使用这个虚拟环境:
- 运行第一个 Python 程序。
- 安装 pytest。
- 运行第一个测试。
- 记录依赖清单。
以后每个项目都应该有自己的环境管理方式。现在先用 Python 标准库 venv,等基础扎实后,再接触 uv、Poetry 等工具。
11. 课后复盘
用自己的话记住这几点:
- 虚拟环境是项目自己的 Python 运行环境。
- 它解决的是依赖隔离问题。
- 创建命令是
python -m venv .venv。 - Windows PowerShell 激活命令是
.\.venv\Scripts\Activate.ps1。 .venv不提交到 Git。- 后续安装依赖时,优先使用
.\.venv\Scripts\python.exe -m pip ...,这样最不容易装错地方。