一、问题背景
在使用 Cursor + Conda + Python(如 LoRA / transformers 项目) 时,经常会遇到如下诡异问题:
-
Cursor 右下角明明显示使用的是某个 conda 虚拟环境(如
lora) -
但运行脚本时却报错:
ModuleNotFoundError: No module named 'transformers' -
pip install明明装过依赖,但 Python 就是找不到 -
conda activate lora在 Cursor 终端里"看起来没报错",但环境实际上没切换
本文记录一次完整踩坑与排查过程,并给出根因分析与稳定解决方案。
二、问题现象复现与关键证据
1️⃣ 运行脚本时报错
from transformers import AutoTokenizer
报错:
ModuleNotFoundError: No module named 'transformers'
2️⃣ 检查 Python 实际路径
在 Cursor 终端中执行:
python -c "import sys; print(sys.executable)"
输出结果是:
D:\anaconda\python.exe
❌ 说明当前使用的是 conda 的 base / 全局 Python,而不是虚拟环境中的 Python
3️⃣ 终端提示符异常
PS D:\LORA>
而不是期望中的:
(lora) PS D:\LORA>
👉 这说明 conda 虚拟环境根本没有真正激活
三、根本原因分析(重点)
核心结论一句话版
Cursor 打开的 PowerShell 终端默认不会加载 conda 的 shell 激活逻辑
1️⃣ conda activate 并不是普通命令
conda activate xxx 并不只是执行一个程序,而是需要在 Shell 层面完成:
-
修改
PATH -
设置
CONDA_PREFIX -
注入当前环境的
python.exe -
修改终端提示符
(lora)
👉 这些操作 必须通过 Shell 脚本完成
2️⃣ PowerShell 的特殊性
-
PowerShell 不会自动加载 conda 的初始化脚本
-
Cursor 使用的是 非登录、非交互的 PowerShell
-
即使你执行过:
conda init powershellCursor 的终端也不一定会读取
$PROFILE
结果就是:
conda命令存在但 PowerShell 并不知道如何"切换环境"
四、为什么必须使用 conda shell.powershell hook
关键命令
conda shell.powershell hook | Out-String | Invoke-Expression
这条命令到底做了什么?
1️⃣ conda shell.powershell hook
→ 生成一整段 PowerShell 环境注入脚本
2️⃣ Out-String
→ 把脚本转成字符串
3️⃣ Invoke-Expression
→ 在当前 PowerShell 会话中立即执行这段脚本
等价于:
手动
source了 conda 的 PowerShell 激活逻辑
执行效果(非常关键)
PS D:\LORA>
↓
(base) PS D:\LORA>
↓
conda activate lora
↓
(lora) PS D:\LORA>
👉 到这一步,PowerShell 才真正学会了如何切换 conda 虚拟环境。
五、Cursor 中 Conda 虚拟环境的正确使用流程(推荐)
✅ Step 1:在 Cursor 终端中注入 conda hook
conda shell.powershell hook | Out-String | Invoke-Expression
conda activate lora
确认提示符变为:
(lora) PS ...
✅ Step 2:验证 Python 路径是否正确
python -c "import sys; print(sys.executable)"
正确结果应类似:
D:\anaconda\envs\lora\python.exe
✅ Step 3:用 python -m pip 安装依赖(避免装错环境)
python -m pip install transformers
验证:
python -c "import transformers; print(transformers.__version__)"
✅ Step 4:对齐 Cursor 的解释器
-
Ctrl + Shift + P -
Python: Select Interpreter -
选择:
Python 3.x ('lora': conda)
六、为什么 Cursor 显示的解释器可能"骗人"
-
Cursor 右下角的解释器 ≠ 当前终端使用的 Python
-
解释器是编辑器级别
-
conda activate 是 shell 级别
👉 二者不一致时,就会出现:
UI 显示是 lora
实际运行用的是 base
七、最佳实践总结(强烈推荐)
✔ 永远以终端 (lora) 为准
✔ 永远用 python -m pip
✔ Cursor 终端首次使用先执行 hook
✔ 不要只相信右下角的解释器提示
八、一句话总结(博客收尾金句)
Cursor 中 conda 虚拟环境的问题,本质不是 Python 或依赖问题,而是 PowerShell 没有加载 conda 的 shell 激活逻辑。
conda shell.powershell hook是在"教 PowerShell 如何切换 conda 环境"。