应使用 python -m venv 创建虚拟环境,避免全局 pip install 导致版本混乱;venv 是 python 3.3+ 标准库内置方案,轻量、兼容性好、ide 原生支持,且环境隔离彻底、清理简单。

直接说结论:用 python -m venv 创建,别碰全局 pip install,否则项目一多、版本一混,三天就能重装系统。
为什么 venv 是当前最稳妥的选择
Python 3.3+ 已把 venv 打包进标准库,无需额外安装,不依赖第三方工具(比如 virtualenv),也没有 conda 那套环境镜像和通道管理的复杂度。它生成的目录结构干净、行为可预测,且被 PyPI、CI 工具链和 IDE(如 PyCharm、VS Code)原生支持。
常见误操作是先 pip install virtualenv 再用 virtualenv myenv ——这反而绕开了官方推荐路径,还可能因 virtualenv 版本滞后引入兼容性问题(尤其在 Python 3.12+ 环境中)。
-
venv创建的环境默认不继承系统 site-packages,天然隔离 - 不带
--system-site-packages参数,就不可能意外污染或依赖全局包 - 删除环境只需
rm -rf .venv(macOS/Linux)或rmdir /s .venv(Windows),没残留注册表或配置文件
python -m venv .venv 这条命令背后的细节
看似简单,但路径、命名、权限三个点最容易出错:
仅使用 Python 将 Claw Code 虚拟化框架与 OpenClaw 集成,提供 184 种工具和 200 多条命令,用于安全分析和代码质量...
- 推荐用
.venv作为目录名:IDE(如 VS Code)会自动识别,gitignore也习惯忽略以.开头的目录 - 不要用绝对路径写死(如
python -m venv /home/user/myproj/env),否则迁移项目时激活脚本会失效 - 如果提示
Permission denied,不是缺 sudo,而是你正在用系统 Python(如 macOS 自带的 Python),应改用 pyenv 或 brew 安装的 Python - Windows 用户注意:
.venv\Scripts\activate.bat用于 cmd,.venv\Scripts\Activate.ps1用于 PowerShell —— 后者需提前运行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
激活后 pip 和 python 指向哪里
激活的本质是修改 $PATH(Linux/macOS)或 %PATH%(Windows),把虚拟环境的 bin/(或 Scripts/)提到最前面。此时:
-
which python(或where python)输出的是.venv/bin/python(或.venv\Scripts\python.exe) -
pip show django查到的路径一定是.venv/lib/python3.x/site-packages/下的 - 执行
python -c "import sys; print(sys.path)",第一项就是虚拟环境的site-packages - 一旦忘记
deactivate就关终端,下次打开仍是全局环境 ——deactivate不报错也不提示,纯静默退出
依赖同步与 requirements.txt 的实际用法
pip freeze > requirements.txt 很方便,但生产中容易埋雷:
- 它会导出所有包,包括
pip、setuptools、wheel—— 这些不该写进requirements.txt,应单独用python -m pip install --upgrade pip管理 - 开发依赖(如
pytest、black)建议另存为requirements-dev.txt,避免部署时多装无用包 - 用
pip install -r requirements.txt时,若某包安装失败,后续包不会跳过 —— 建议加--no-deps先装主依赖,再手动补依赖 - Python 版本差异大时(如从 3.9 升到 3.12),
requirements.txt中的包可能已不兼容,务必配合pyproject.toml锁定解释器版本
真正麻烦的从来不是创建环境,而是当同事 pull 代码后发现 ImportError: No module named 'requests' 却死活查不出没激活 —— 因为 shell 提示符没变、IDE 底栏也没标环境名,这种“静默失效”才是日常踩坑主力。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










