Conda环境卡死?重启大法拯救崩溃主包
事情的起因是这样的:主包在GitHub下载了一个开源项目,并在VSCode中完成了初步的推理测试。当准备进行单步调试时,突然意识到自己是通过解压缩方式而非git命令下载的代码(主包更喜欢这种修改痕迹直观可见的方式)。于是删除了原有代码,改用git方式重新下载。然而再次进入开发环境时,就出现了以下情况:
激活环境时遇到卡死问题,终端无法换行或输入。正常情况下应在第二行显示带括号的环境名(如下图所示),但当前终端始终停留在第一行无法继续操作。
主包不断删除并重建终端试图修复问题,但每次新建终端后都会立即变成以下状态:情况变得有些异常,突然出现了conda-hook.ps1文件,主要程序包对此感到困惑,完全不清楚这个文件的用途。
主包无奈之下只好向AI求助。
AI给出的诊断是:PowerShell正在执行conda-hook.ps1脚本,但conda activate命令未能完整执行 终端当前卡在:
PS D:\Code\DexiNed> (D:\Anaconda3\shell\condabin\conda-hook.ps1) ; (conda activate sketch_gpu_new)说明:
- PowerShell profile / conda 初始化异常
- 或者
conda-hook.ps1执行被阻塞 - 或环境损坏
- 或 PowerShell 执行策略问题
这是 Windows 下 Conda + PowerShell 很常见的问题。
(1)方法一:
打开:Anaconda Prompt,不要用 PowerShell。
开始菜单搜:
Anaconda Prompt然后执行:
conda init powershell正常应该看到:
modified ... ==> For changes to take effect, close and re-open your current shell. <==然后:完全关闭 VSCode,重新打开。再测试:
conda activate sketch_gpu_new笑死!主包打开Anaconda Prompt后界面一片空白,一个字都不显示。不过主包心态稳得很,立马开始了第二轮尝试,真有你的!
(2)方法二:检查 PowerShell profile
在 PowerShell 输入:
$PROFILE通常会得到:
C:\Users\你的用户名\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1打开:
notepad $PROFILE看看里面是不是有奇怪内容。尤其是:
(& "D:\Anaconda3\shell\condabin\conda-hook.ps1")如果有重复初始化、乱码、残缺代码。直接:全删掉,保存。然后重新:
conda init powershell当主包运行命令notepad $PROFILE后出现如下报错:
后面按照AI的指示又断断续续的在 PowerShell中进行尝试,结果还是不行,哈哈哈哈!
(3)第三次尝试:
AI建议在深度学习环境中使用CMD更合适,于是我将VSCode切换至CMD终端,但程序仍然出现了卡死问题!!!
Ctrl + Shift + P输入:
Terminal: Select Default Profile选择:
Command PromptAI解释说有一种高概率情况:
你的安装路径:
D:\Anaconda3而 VSCode 自动执行:
D:\Anaconda3\Scripts\activate.bat实际上:activate.bat 内部调用 conda.bat 时死循环了。
这是 Conda 24+ 在 Windows 的经典问题。
我觉得很有可能,因为我的路径和conda 24.9.2都满足了这两点
(4)第四次尝试:
AI叫我重新安装环境!!!!
哈哈哈哈哈!!!!
我疯了!!!
我最讨厌安装环境了!!
受不了了,主包直接重启!!!
哈哈哈!!!
重启大法好啊!!!重启大法好啊!!!重启大法好啊!!!重启大法好啊!!!
(5)复盘一下:
1️⃣ 核心原因:Shell + 激活残留进程卡死
我之前的表现:
- PowerShell 卡死,
conda activate sketch_gpu_new永远不返回 - CMD 里尝试激活也卡住
- 重启之后一切恢复正常
说明:
- 当时 Windows shell(PowerShell 或 CMD)里可能残留了被挂起的 conda activate 进程
- activate 脚本内部会修改 PATH、执行 shell hook,如果上一次执行被中断(KeyboardInterrupt 或异常关闭)
- 下一次激活就可能遇到锁文件 / 环境变量冲突 / PATH 未刷新
- 这种情况最典型的是在PowerShell + VSCode 终端中出现
2️⃣ 次要原因:PowerShell 用户配置 & OneDrive
- 我之前尝试
conda init powershell卡住 - 用户 profile 可能半残(不存在或被 OneDrive / Documents 重定向干扰)
- PowerShell 启动时会自动加载 profile,如果 profile 里调用了 conda-hook.ps1,就会卡住
- 这种情况在 CMD 不激活 base 时通常没问题,但 VSCode 里默认 PowerShell 就容易复现
3️⃣ 其他潜在因素
- Conda 24+ 使用 libmamba solver,activate 时会访问环境 metadata,如果之前进程没退出,会锁住环境文件夹
- 用户环境位于
C:\Users\xxx\.conda\envs,虽然不是 OneDrive,但之前半残进程可能锁住某些文件 - VSCode 自动执行
D:\Anaconda3\Scripts\activate.bat+conda activate MC,会重复触发 shell hook,如果残留进程没退出就卡住
4️⃣ 为什么重启后恢复正常
- 重启会清掉所有挂起的 activate 进程
- Windows 会重置环境变量、锁文件、shell hook 状态
- 所以再打开 CMD 或 Anaconda Prompt 就能正常激活环境
✅ 总结
之前卡死的原因可以归纳为:
- PowerShell + VSCode shell hook 半残
- 上一次 activate 被中断或卡死,残留进程锁住环境
- 用户 profile 或 PATH 异常
- 环境文件或 activate.bat 被锁
本质上并不是 Conda 或环境本身永久损坏,而是临时进程 / shell 状态导致的卡死。
💡经验教训 / 避坑建议
- CMD 更稳定,VSCode 默认 CMD 终端(已经改成cmd模式了)
- 遇到卡死先 Ctrl+C,关闭终端,必要时重启
- 避免在 PowerShell 里乱执行
conda init(下次再不乱尝试了) - Conda 环境放在非 OneDrive / 非系统目录,路径简单、无中文空格
- 每个项目使用独立 Conda 环境,避免 activate 互相干扰(因为主包不想下载太多的环境安装各种库,怕占内存,所以主包多个项目都使用的同一个环境)
