02 创建虚拟环境

  • 本节目标:理解虚拟环境的作用,并为当前仓库创建 .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 运行环境。

它里面通常包含:

  1. 一个项目专用的 Python 解释器入口。
  2. 一个项目专用的 pip。
  3. 一个项目专用的第三方包目录。

在 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 安装的包会进入 .venvsite-packages,不会污染全局 Python。

3. 为什么不能把依赖都装到全局 Python

3.1 全局环境的问题

全局 Python 是电脑级别的 Python。所有项目都往里面装包,会产生几个问题:

  1. 包越来越多,不知道哪个项目需要哪个包。
  2. 包版本互相冲突。
  3. 删除一个包可能影响另一个项目。
  4. 换电脑后很难复现项目环境。
  5. 学习时很难判断某个包是项目依赖还是历史遗留。

3.2 虚拟环境的好处

虚拟环境能让项目更清晰:

  1. 每个项目单独管理依赖。
  2. 可以用 requirements.txt 记录依赖。
  3. 换电脑后可以重新创建相似环境。
  4. 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。

应该提交的是:

  1. 项目源码。
  2. 课件和文档。
  3. 依赖清单,例如后续的 requirements.txt
  4. 测试代码。

不应该提交的是:

  1. .venv/
  2. __pycache__/
  3. .pytest_cache/
  4. 本地密钥文件。

本仓库 .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 会继续使用这个虚拟环境:

  1. 运行第一个 Python 程序。
  2. 安装 pytest。
  3. 运行第一个测试。
  4. 记录依赖清单。

以后每个项目都应该有自己的环境管理方式。现在先用 Python 标准库 venv,等基础扎实后,再接触 uv、Poetry 等工具。

11. 课后复盘

用自己的话记住这几点:

  1. 虚拟环境是项目自己的 Python 运行环境。
  2. 它解决的是依赖隔离问题。
  3. 创建命令是 python -m venv .venv
  4. Windows PowerShell 激活命令是 .\.venv\Scripts\Activate.ps1
  5. .venv 不提交到 Git。
  6. 后续安装依赖时,优先使用 .\.venv\Scripts\python.exe -m pip ...,这样最不容易装错地方。
相关推荐
旺仔来了2 小时前
不联网的Linux下部署python环境
linux·开发语言·python
小江的记录本2 小时前
【JVM虚拟机】垃圾回收GC:垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·安全·面试
IP搭子来一个2 小时前
爬虫采集大量返回 403、429,到底卡在哪一环?
网络·爬虫·python
deepin_sir2 小时前
06 综合对比与实战选型——到底该用哪个?
python
小江的记录本3 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:G1:Region分区、Mixed GC、回收流程、适用场景(高频)(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·spring cloud·面试
智研数智工坊3 小时前
FastAPI+uv+Jinja2+Nuitka 通用Web桌面框架搭建教程|从零搭建可打包迭代的Python开发底座
python·fastapi·uv·nuitka·jinja2·桌面应用开发
Ulyanov3 小时前
用声明式语法重新定义Python桌面UI:QML+PySide6现代开发入门(一)
开发语言·python·算法·ui·系统仿真·雷达电子对抗仿真
❀搜不到4 小时前
Ubuntu查看指定Python程序的CPU、GPU、内存占用情况
linux·python·ubuntu