venv创建后仍用全局包的主因是未激活或激活失败;必须通过which python(macos/linux)或where python(windows)确认路径指向.venv目录,且pip list仅显示基础包才算隔离成功。

venv 不需要“配置”,它本身是 Python 3.3+ 内置的轻量模块,创建即隔离。关键在于正确创建、激活、使用,而不是后期配置。
为什么 python -m venv myenv 创建后仍会用到全局包?
最常见原因是激活失败或未激活——venv 创建的环境默认不自动激活,也**不修改系统 PATH**。没激活时,终端运行的仍是全局 python 和 pip。
检查方法:运行 which python(macOS/Linux)或 where python(Windows),输出路径应包含 myenv 目录;否则就是没激活。
- Linux/macOS:执行
source myenv/bin/activate - Windows(cmd):执行
myenv\Scripts\activate.bat - Windows(PowerShell):需先允许脚本执行(
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser),再运行myenv\Scripts\Activate.ps1
激活成功后,命令行提示符通常会显示 (myenv),且 pip list 应只显示 pip、setuptools、wheel 这三个基础包——这是干净隔离的标志。
pyvenv.cfg 里 include-system-site-packages = false 是什么意思?
这个配置项控制是否“继承”系统级 site-packages(即全局已装的包)。默认为 false,意味着严格隔离——你装什么,就只能用什么。
除非有特殊需求(比如测试兼容性),否则不要手动改成 true。改了之后:pip install 仍只装进虚拟环境,但 import 时可能意外导入全局包,导致行为不可复现。
注意:venv 不支持像 virtualenv --system-site-packages 那样创建时指定该选项;如真需要,得用 virtualenv 工具,而非标准 venv。
项目根目录下该放 venv 文件夹还是 .venv?
放哪都行,但推荐用 .venv(点开头):
- 多数编辑器(VS Code、PyCharm)和工具(
pipenv、poetry)默认识别.venv为虚拟环境目录 -
.venv在文件管理器中默认隐藏,减少干扰;而venv容易被误删或提交进 Git - 如果要用 Git,请确保
.gitignore包含.venv/或对应名称——虚拟环境目录体积大、平台相关、不可复现,绝不能进版本库
创建命令就是 python -m venv .venv,后续激活路径相应变成 .venv/bin/activate 或 .venv\Scripts\activate.bat。
为什么 pip install 后包在 site-packages 里却 import 报错?
根本原因通常是 Python 解释器没切过去——即使你激活了 shell,IDE(如 VS Code)或 Jupyter 可能仍用着旧的解释器。
验证方式:在代码里打印 import sys; print(sys.executable),输出路径必须指向 .venv(或 myenv)内部的 python 可执行文件。
常见漏点:
- VS Code:按
Ctrl+Shift+P→ 输入 “Python: Select Interpreter” → 手动选中.venv/bin/python(macOS/Linux)或.venv\Scripts\python.exe(Windows) - Jupyter:启动前先激活环境,再运行
jupyter notebook;或用python -m ipykernel install --user --name myenv --display-name "Python (myenv)"注册内核 - PyCharm:在 Project Interpreter 设置里,把路径指向
.venv/bin/python,别选错成全局/usr/bin/python3
一旦解释器路径不对,pip install 装在哪都不管用。
真正容易被忽略的,不是怎么创建 venv,而是每次打开新终端、换 IDE、跑 notebook 时,都得重新确认解释器是否真的切换过去了。隔离不是一次性的动作,而是一直要盯住的上下文。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











