Python 虚拟环境介绍

1. 什么是虚拟环境

虚拟环境可以理解为“项目专属的 Python 运行环境”。

它通常包含:

  • 一份独立的 Python 解释器引用。
  • 一套独立安装的第三方包。
  • 与其他项目隔离的依赖版本。

比如项目 A 需要 Django 3.x,项目 B 需要 Django 5.x,如果都装在全局环境里就容易冲突。使用虚拟环境后,每个项目可以安装自己需要的版本,互不影响。

2. 为什么需要虚拟环境

实际开发中,建议每个 Python 项目都使用虚拟环境,主要原因有:

  • 避免依赖冲突:不同项目可以使用不同版本的库。
  • 保持全局环境干净:不要把所有包都安装到系统 Python 里。
  • 方便迁移项目:通过 requirements.txt 记录依赖,别人可以快速还原环境。
  • 减少“我这里能跑”的问题:团队成员安装相同依赖版本,更容易复现结果。

常见目录结构:

my-project/
├── .venv/              # 虚拟环境目录,通常不提交到 Git
├── main.py
└── requirements.txt    # 项目依赖清单

3. venv 基础用法

venv 是 Python 官方内置的虚拟环境工具,一般不需要额外安装。

3.1 创建虚拟环境

在项目根目录执行:

python -m venv .venv

如果你的系统里 python 指向 Python 2 或命令不存在,可以尝试:

python3 -m venv .venv

说明:

  • .venv 是虚拟环境目录名,属于常见约定。
  • 也可以叫 venvenv,但推荐统一使用 .venv
  • .venv 一般需要加入 .gitignore,不要提交到代码仓库。

3.2 激活虚拟环境

创建完成后,需要先激活虚拟环境,再安装依赖。

Windows PowerShell

.venv\Scripts\Activate.ps1

Windows CMD

.venv\Scripts\activate.bat

Git Bash

source .venv/Scripts/activate

macOS / Linux

source .venv/bin/activate

激活成功后,命令行前面通常会出现 (.venv)

(.venv) my-project $

3.3 验证当前 Python 和 pip

python --version
python -m pip --version

查看当前 Python 路径:

python -c "import sys; print(sys.executable)"

如果输出路径在项目的 .venv 目录下,说明正在使用虚拟环境。

4. pip 常用命令

建议在虚拟环境中使用 python -m pip,这样可以确保 pip 对应当前 Python 环境。

4.1 升级 pip

python -m pip install --upgrade pip

4.2 安装包

python -m pip install requests

指定版本:

python -m pip install "django==5.0.6"

指定版本范围:

python -m pip install "fastapi>=0.110,<1.0"

4.3 查看已安装包

python -m pip list

查看某个包的详细信息:

python -m pip show requests

4.4 卸载包

python -m pip uninstall requests

4.5 查看依赖是否有问题

python -m pip check

5. requirements.txt

requirements.txt 用来记录项目依赖,方便在新电脑、服务器或团队成员机器上还原环境。

5.1 生成依赖文件

在已经安装好依赖的虚拟环境中执行:

python -m pip freeze > requirements.txt

示例内容:

requests==2.32.3
fastapi==0.115.0
uvicorn==0.30.6

5.2 根据依赖文件安装

拿到项目后,一般流程是:

python -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt

Windows PowerShell 对应流程:

python -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install -r requirements.txt

5.3 requirements.txt 使用建议

  • 应用项目建议固定版本,例如 requests==2.32.3
  • 学习和小脚本可以简单一些,但也建议保留依赖文件。
  • 不要把 .venv 目录提交到仓库,提交 requirements.txt 即可。

6. 退出虚拟环境

完成开发后,可以退出当前虚拟环境:

deactivate

退出后,命令行前面的 (.venv) 会消失。

7. 常见问题

7.1 PowerShell 提示禁止运行脚本

如果激活时报错:

无法加载文件 Activate.ps1,因为在此系统上禁止运行脚本

可以执行:

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

然后重新激活:

.venv\Scripts\Activate.ps1

7.2 激活了虚拟环境,但包还是找不到

常见原因:

  • 包安装到了其他 Python 环境。
  • IDE 没有选择项目的 .venv 解释器。
  • 终端没有真正激活虚拟环境。

排查命令:

python -c "import sys; print(sys.executable)"
python -m pip list

在 VS Code、PyCharm 等 IDE 中,也要手动选择 .venv 中的 Python 解释器。

7.3 应该用 pip 还是 pip3

在虚拟环境里推荐使用:

python -m pip install 包名

这样最稳定,不容易把包装到错误环境。

7.4 可以删除 .venv 吗

可以。.venv 只是本地虚拟环境目录,不是源码。

如果环境乱了,可以删除后重新创建:

python -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt

Windows PowerShell:

python -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install -r requirements.txt

7.5 requirements.txt 里依赖太多怎么办

pip freeze 会把当前环境中的所有包都写进去,包括间接依赖。

新手阶段可以先接受这种方式。项目复杂后,可以考虑使用 uvpoetry 等工具管理直接依赖和锁文件。

8. uv / conda / poetry 与 venv 的简单对比

工具适合场景特点
venvPython 官方基础虚拟环境内置、简单、稳定,适合入门和普通项目
uv更快地创建环境和安装依赖速度快,可以替代很多 pipvenv 的日常操作
conda数据科学、机器学习、需要非 Python 依赖能管理 Python 版本和很多系统级依赖,环境较重
poetry正式项目、包发布、依赖版本管理使用 pyproject.toml 管理项目,依赖声明更规范

简单选择建议:

  • 初学 Python:先学 venv + pip + requirements.txt
  • 想提升安装速度:了解 uv
  • 做数据科学或机器学习:可以学习 conda
  • 做可维护的正式项目或 Python 包:可以学习 poetry

9. 一套推荐的新项目流程

macOS / Linux:

mkdir my-project
cd my-project
python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install requests
python -m pip freeze > requirements.txt

Windows PowerShell:

mkdir my-project
cd my-project
python -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install requests
python -m pip freeze > requirements.txt

后续再次进入项目时,只需要:

cd my-project
source .venv/bin/activate

Windows PowerShell:

cd my-project
.venv\Scripts\Activate.ps1