有必要。不创建venv就直接pip install会将依赖焊死在系统python上,引发确定性版本冲突;必须用python -m venv创建,确保使用当前shell的python解释器,避免path混乱导致环境错配。

pip install,等于把所有依赖焊死在系统 Python 上——这不是“方便”,是给后续所有项目埋确定性雷。
为什么 python -m venv 是唯一安全的创建方式
它强制使用当前 shell 中的 python 可执行文件,避免因 PATH 混乱导致创建出错版本的环境。比如你本意用 Python 3.11,但系统里还装着 3.9,直接调用 venv 命令可能偷偷调用旧版解释器。
常见误操作:
- 用
venv venv而不是python -m venv venv—— 在某些 Linux 发行版或 macOS Homebrew 环境中,venv命令可能指向系统级安装,而非你期望的 Python 版本 - 目录名不用
venv或.venv—— PyCharm、VS Code、pre-commit、poetry 等工具默认只识别这两个名称,其他名字要手动配置路径 - 加了
--system-site-packages—— 这会让虚拟环境“偷看”全局包,隔离失效,pyvenv.cfg里必须是include-system-site-packages = false
激活后仍装错包?先验证两件事
激活不是魔法,只是改了 PATH 和一些环境变量。是否真生效,只看这两条命令的输出:
-
which python(Linux/macOS)或where python(Windows)—— 路径必须含venv/bin/python或venv\Scripts\python.exe -
which pip或where pip—— 同样必须落在venv/目录下
PowerShell 用户若遇到 activate.ps1 cannot be loaded,不是权限问题,是旧签名残留;删掉 venv\Scripts\activate.ps1 再重新运行 python -m venv venv 即可。
VS Code 常缓存旧解释器路径,需手动打开命令面板 → Python: Select Interpreter → 手动指向 venv/bin/python(macOS/Linux)或 venv\Scripts\python.exe(Windows)。
requirements.txt 不是备份,是契约
它只承担一个角色:在另一台机器上重放环境。所以:
-
pip freeze > requirements.txt必须在激活后的虚拟环境中运行,否则导出的是全局包快照,包含大量无关项 - 不要手动往
requirements.txt里加注释、空行或-e .——pip install -r会直接报错 -
venv目录绝不能提交到 Git;但requirements.txt必须提交,且上线前应重新生成一次,确保与当前运行环境一致
真正容易被忽略的限制:C 扩展 ABI 不兼容
venv 隔离不了底层 C 库的二进制兼容性。比如你在 macOS 上用 Python 3.11 编译的 torch,换到 Ubuntu 22.04 的同版本 Python 环境里,仍可能因 libomp 版本不匹配而段错误。这时 venv 自身无能为力,得靠 conda 或容器补位。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











