为什么要隔离环境

大二上学期吃过一次亏:项目 A 用 Flask 2.0,项目 B 用 Flask 3.0,装完 B 后 A 跑不起来了。全局装包就像把所有衣服塞一个柜子——找衣服难,还容易串味。

虚拟环境 = 每个项目有自己的 Python 解释器和包目录。

创建和激活虚拟环境

Python 3.3+ 自带 venv,不需要额外安装:

# 创建虚拟环境(在项目目录下)
python -m venv venv

# 激活(Windows Git Bash)
source venv/Scripts/activate

# 激活(Linux/Mac)
source venv/bin/activate

# 看到命令行前面出现 (venv) 就算成功了

激活后用 pip list 查看——几乎空的,只有 pip 和 setuptools。这才叫干净。

退出虚拟环境:

deactivate

配置国内 pip 源

默认源在海外,速度感人。配置清华镜像:

# 方法一:临时指定
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple

# 方法二:永久配置
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

# 配置信任(有些库需要)
pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn

配置文件位置:Windows 在 %APPDATA%\pip\pip.ini,Linux 在 ~/.config/pip/pip.conf。也可以直接手写:

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn

requirements.txt 规范

这是项目的"依赖清单",队友克隆后一条命令装完所有依赖。

# 导出当前环境的包
pip freeze > requirements.txt

生成的文件长这样:

flask==3.0.0
requests==2.31.0
numpy==1.26.2

注意pip freeze 会包含所有子依赖,文件可能很长。更推荐手动维护核心依赖:

# requirements.txt
flask>=3.0
requests
numpy
gunicorn

队友拿到后安装:

pip install -r requirements.txt

区分依赖环境

稍微大点的项目通常分文件:

requirements/
├── base.txt      # 生产和开发都需要的
├── dev.txt       # 仅开发需要(pytest、black 等)
└── prod.txt      # 仅生产需要(gunicorn 等)

日常流程总结

# 新项目启动三步走
git clone <项目地址>
cd 项目目录
python -m venv venv && source venv/bin/activate && pip install -r requirements.txt

不要 commit venv 目录——在 .gitignore 里加上 venv/。每个开发者在本地自己创建虚拟环境。