极简工具箱

免费在线工具 · 本地计算 · 无需上传

Python 虚拟环境:为什么必须用、怎么用

两个项目一个要 Django 3.2、一个要 Django 5.0,全局装只能留一个。虚拟环境不是「最佳实践」,而是多项目开发的必要条件。

广告位(百度联盟)

一、为什么需要

不加虚拟环境时,所有项目共用一个 site-packages:版本冲突、卸载一个包把别的项目搞挂、系统包被污染。虚拟环境给每个项目一套独立的解释器与包目录,互不影响。

二、创建与激活

# 创建(在项目根目录)
python3 -m venv .venv

# 激活
source .venv/bin/activate        # macOS / Linux
.venv\Scripts\activate           # Windows cmd
.venv\Scripts\Activate.ps1       # Windows PowerShell

# 退出
deactivate

激活后命令行前面会出现 (.venv),which python 指向 .venv/bin/python。这一步是判断是否激活成功的可靠方式,比看提示符靠谱。

三、装包与导出

pip install requests
pip freeze > requirements.txt
pip install -r requirements.txt

pip freeze 会导出所有已安装包(包括依赖的依赖),适合精确复现。只想记录直接依赖时,手工维护一个精简的 requirements.in,或用 pip-tools 生成锁文件。

四、.venv 不要提交到仓库

.venv/
venv/
__pycache__/
*.pyc

虚拟环境里是平台相关的二进制,提交上去既占空间又不能跨平台用。团队协作只共享 requirements.txt,各自创建环境。

五、激活失败的常见原因

现象原因与解决
command not found: python3未安装 Python 或不在 PATH
Activate.ps1 cannot be loaded(Windows)执行策略限制,Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
激活了但 pip install 装到全局用了 sudo pip,或激活的是另一个 shell
python 版本不对创建时用了 python3.11 -m venv,激活后应一致
IDE 里不生效需在 IDE 设置里指定解释器路径,不是靠 shell 激活

最后一条最容易忽略:VS Code / PyCharm 用自己的解释器设置,终端激活不会自动同步。

六、虚拟环境里有什么

.venv/
├── bin/            # python、pip、激活脚本
├── lib/python3.x/site-packages/
└── pyvenv.cfg      # 记录基础解释器路径与版本

它不复制标准库,只创建一个指向基础解释器的链接,所以创建很快、占用很小。这也意味着不要移动或删除基础 Python,否则虚拟环境会失效。

七、venv、virtualenv、conda、pyenv 怎么选

工具用途
venv标准库自带,够用,推荐默认
virtualenv更快、支持更老版本,第三方
conda管理 Python 版本 + 二进制包,数据科学常用
pyenv管理多个 Python 版本本身(不是虚拟环境)
poetry / uv依赖管理 + 虚拟环境一体,现代项目常用

组合方式常见是「pyenv 管版本 + venv 管项目依赖」,或直接用 uv 一步到位。

八、部署时的做法

服务器上不需要「激活」,直接指定解释器路径更可靠:

/path/to/.venv/bin/python app.py
/path/to/.venv/bin/pip install -r requirements.txt

systemd 的 ExecStart 里写绝对路径,就不会有「激活没生效」的问题。

小结

python -m venv .venv 创建,source .venv/bin/activate 激活,pip freeze > requirements.txt 导出;.venv 加进 .gitignore;部署时直接用 .venv/bin/python 绝对路径。

本文相关工具(本地计算,无需上传)

更多使用教程