虚拟环境迁移后失效的根本原因是pyvenv.cfg的home字段、activate脚本中的VIRTUAL_ENV变量及pip.exe头部均硬编码原始绝对路径,导致无法定位Python解释器并报Fatal error in launcher。

pyvenv.cfg 的 home 路径写错或失效
虚拟环境激活后 which python 或 sys.executable 仍指向系统 Python,基本就是 pyvenv.cfg 里 home 字段路径不对。这个字段必须精确指向当前机器上真实存在的 Python 解释器(不是软链接,是实际可执行文件路径)。
修复方法很简单:
- 用文本编辑器打开虚拟环境根目录下的
pyvenv.cfg - 找到
home = ...这一行,把它改成你本机 Python 的绝对路径,比如 Linux/macOS 上可能是/usr/bin/python3.11,Windows 上可能是C:\Python311\python.exe - 保存后退出,重新激活环境再验证:
python -c "import sys; print(sys.executable)"
注意:别直接复制别人环境里的 pyvenv.cfg,路径不一致会导致完全无法识别解释器。
虚拟环境被移动或父目录重命名后 ModuleNotFoundError
把整个 venv 文件夹剪切到新路径、或者改了上层文件夹名字,pip install 仍往旧路径写包、import 找不到模块——这不是 bug,是 venv 的设计限制:它内部大量硬编码原始路径,包括 activate 脚本、pip 可执行文件、甚至 site-packages 的 .pth 文件。
此时不要尝试手动修所有路径,成本高且易漏。稳妥做法只有两个:
- 删掉整个旧
venv目录,用python -m venv venv在新位置重建(推荐,10 秒搞定) - 如果里面装了大量离线包、不想重装,可用
venv-pack打包迁移:pip install venv-pack→venv-pack -o env.tar.gz→ 在目标机解包并source bin/activate
别用复制粘贴方式复用 venv,这是绝大多数路径类报错的根源。
VSCode 终端不认选中的虚拟环境
右下角显示 ./venv/bin/python,但终端里 python -c "import sys; print(sys.executable)" 输出的是 /usr/bin/python3 ——说明 VSCode 的解释器选择和终端进程完全脱节。
关键动作只有三步:
- 在
.vscode/settings.json中添加:"python.terminal.activateEnvironment": true - 关闭所有已打开的集成终端(不是关标签页,是关整个终端面板)
- 按 Ctrl+Shift+P →
Python: Select Interpreter,从列表里选带完整路径的项(避免只显示Python 3.11的模糊条目)
Code Runner 插件默认无视这个设置,点 ▶️ 运行时务必选 “Run Python File in Terminal”,否则永远走系统 Python。
pip 安装包却导入失败,路径对不上
pip list 显示包已安装,但 import requests 报 ModuleNotFoundError,大概率是 pip 和 python 不在同一个环境里运行。常见于:
- 终端没激活 venv 就直接敲
pip install(这时 pip 是系统 pip) - 用了
python -m pip install但 python 指向的是系统解释器 - VSCode 里点了右键“Run Python File”,但没启用
python.terminal.activateEnvironment
验证方式始终是同一行命令:python -c "import sys; print(sys.executable)" 和 python -m pip show requests 的输出路径必须完全一致。不一致就说明 pip 和 python 分属不同环境,必须统一入口。
路径问题的本质不是配置遗漏,而是 venv 对路径的强绑定特性被意外打破。修复时优先考虑“重建”而非“修补”,尤其当涉及移动、复制、跨机器场景——省下的调试时间远大于重装几秒。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











