venv是Python 3.3+内置的虚拟环境模块,通过复制解释器和创建独立site-packages实现项目级依赖隔离,无需安装、轻量高效;它不管理Python版本切换,也不处理非Python依赖,日常开发优先于virtualenv和conda。

直接用 python -m venv 就能创建干净隔离的虚拟环境,不需要额外安装工具,但必须注意 Python 版本、路径权限和激活方式这三点,否则环境看似创建成功却无法正常 pip 安装或导入包。
venv 是什么,为什么不用 virtualenv 或 conda
venv 是 Python 3.3+ 内置的标准库模块,不依赖 pip install,启动快、体积小、无额外依赖。它只做一件事:复制一份干净的 Python 解释器 + 独立的 site-packages 目录。而 virtualenv 是第三方实现,支持老版本 Python;conda 隔离的是整个运行时(包括编译器、非 Python 包),适合科学计算但启动慢、磁盘占用大。日常开发优先选 venv。
创建虚拟环境时常见错误和正确做法
错误现象包括:ModuleNotFoundError: No module named 'pip'、Command 'pip' not found、新环境里仍能 import 系统全局安装的包。根本原因是未启用 --upgrade-deps 或未正确激活。
- 始终用绝对路径或明确的相对路径创建,避免在符号链接目录中执行:
python -m venv ./myenv(不要写成python -m venv myenv后再 cd 进去) - 创建后立即升级 pip:
./myenv/bin/python -m pip install --upgrade pip(macOS/Linux)或myenv\Scripts\python.exe -m pip install --upgrade pip(Windows) - 不要手动修改
myenv/pyvenv.cfg中的include-system-site-packages = true,这会破坏隔离性 - 确认是否启用了
--system-site-packages参数——除非你明确需要复用系统包,否则绝不加这个参数
激活与退出虚拟环境的可靠方式
激活不是“进入文件夹”,而是把当前 shell 的 PYTHONPATH 和 PATH 临时重定向到虚拟环境的 bin/Scripts 目录。一旦终端关闭或执行 deactivate,就自动还原。
- Linux/macOS:
source ./myenv/bin/activate(注意是source,不是sh或bash) - Windows cmd:
myenv\Scripts\activate.bat;PowerShell 默认禁止脚本执行,需先运行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser,再用myenv\Scripts\Activate.ps1 - 验证是否生效:运行
which python(macOS/Linux)或where python(Windows),输出路径应指向myenv内部;再运行python -c "import sys; print(sys.prefix)",输出应为虚拟环境路径
删除虚拟环境的唯一安全方式
虚拟环境本质就是个普通文件夹,没有守护进程或注册表项。只要确保没在该环境中运行任何 Python 进程(比如 Jupyter kernel、后台 Flask server),就可以直接 rm -rf myenv(macOS/Linux)或 rmdir /s myenv(Windows)。别试图用 pip uninstall 或其他工具“卸载”它——那只会删错东西。
容易被忽略的一点:某些 IDE(如 VS Code)会缓存 Python 解释器路径,删掉虚拟环境后,即使重新创建同名目录,IDE 仍可能尝试加载旧路径下的 pyzmq 或 debugpy,导致调试失败。此时要手动在命令面板中选择解释器,或清空 .vscode/settings.json 中的 python.defaultInterpreterPath。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











