1. 报错出现的典型场景与根因分析
1.1 这个报错到底长什么样
如果你用过 conda 管理 Python 环境,大概率遇到过下面这种鬼打墙式的报错:
text复制CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
To initialize your current shell, run:
$ conda init
For more information, please see the documentation.
CondaError: Run 'conda init' before 'conda activate'
第一次看到这个提示的时候,我的第一反应是:我明明已经装了 conda,而且 conda list、conda create 这些命令都能正常用,为什么偏偏 activate 这一下就翻车?更离谱的是,有时我刚刚在某个终端里激活成功了,换一个新的终端窗口就又报同样的错。
如果你是用 Windows,可能还会出现另一种变体:
text复制'conda' 不是内部或外部命令,也不是可运行的程序或批处理文件。
这两个问题其实同根同源——都是 shell 环境没找到 conda 的初始化代码。但 Windows 因为终端类型不一样,表现形态会略有差异。我之前帮同事排查这个问题时,发现他电脑上 conda 命令本身能执行,但 activate 永远报错,折腾了半小时才发现他用的终端是 Git Bash 而不是 Anaconda Prompt。
1.2 conda init 究竟做了什么
要理解这个问题,得先搞清楚 conda activate 和 conda init 之间的逻辑关系。
很多人以为 conda 装好了,conda 命令能敲出来,conda activate 就应该能用。但实际操作中不是这样的。conda 在安装时,往 PATH 里加的是它自己的可执行目录,而不是帮你把激活逻辑注入到 shell 启动文件里。换句话说,你只拿到了工具本身,但工具和你的 shell 之间还没有建立起联动。
conda init 这个命令做的事,是往你的 shell 配置文件里写一段初始化代码。以 bash 为例,它会改 ~/.bashrc;如果是 zsh,会改 ~/.zshrc;Windows PowerShell 则是 Profile 文件。这段初始化代码主要干三件事:
- 把 conda 的可执行目录加入当前 shell 的 PATH
- 定义 conda() 这个 shell 函数,让 conda 命令先经过 shell 层处理
- 设置 CONDA_SHLVL 之类的环境变量,用于追踪当前所在的环境层级
注意第 2 点,conda 命令不再是一个直接的可执行程序,而是一个 shell 函数。这也是为什么很多时候你在脚本里直接写 conda activate 会失败,而在交互式终端里却正常——脚本环境不一定加载了 .bashrc。
我见过不少教程说,遇到这个报错执行一下 conda init 就行了。这个说法对,但没有解释为什么之前好好的,突然某一天就报错了。事实上,很多人的 conda init 是执行过的,但因为后续手动改过 .bashrc、换过 shell、或者用 VS Code 开了远程连接,初始化代码被覆盖或者还没被加载,于是报错又回来了。
1.3 为什么 install 之后 switch 环境还是会报错
再补充一个常见场景:你从官网下载了 Miniconda 安装包,一路 Next 把 conda 装好,然后开开心心地打开终端,输入 conda create -n test python=3.9,创建成功,接着输入 conda activate test,好,报错了。
为什么?因为安装器在安装过程中如果检测到 PATH 没有写入 ~/.bashrc(或者你没有选择自动添加环境变量),它不会替你执行初始化步骤。conda 命令能用,是因为你当时可能正用着 Anaconda Prompt 或某个已经加载了 conda 的终端。换了一个全新的 shell,配置不存在,自然激活不了。
另一种容易踩坑的情况是:你刚用 conda init 初始化完,终端提示要重启 shell。你懒得重启,直接在同一个终端里输入 conda activate test,发现还是报错。这时候你只需要先 source ~/.bashrc(Linux/macOS)或者在新的终端窗口里操作,初始化代码才会真正生效。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Windows 与 Linux/macOS 两条路径的完整修复方案
2.1 Windows 下的正确打开方式
Windows 上 conda 相关的报错,最容易混淆的点是同时存在多个终端:CMD、PowerShell、Windows Terminal、Git Bash、WSL。同样的命令在不同终端下面效果完全不同。
先说说最省事的方法:如果你用的是 Anaconda Prompt,它默认已经加载了所有 conda 初始化逻辑,基本上不会出现 activate 失败的情况。问题往往出在你跑到 CMD 或者 PowerShell 里去敲 conda activate。
在 CMD 里,最直接的解决办法是让 Anaconda Prompt 的快捷方式作为你日常打开终端的入口。但如果你就是要在 CMD 里用,可以手动执行一次初始化脚本。以 Miniconda 默认安装路径为例:
bat复制%USERPROFILE%\miniconda3\Scripts\activate.bat %USERPROFILE%\miniconda3
这行命令的作用是临时把 conda 的激活脚本加载到当前 CMD 会话里。但注意,这只是在当前窗口有效,关掉再开还得重新执行。
如果你想彻底解决,让 CMD 每次打开都能直接用 conda activate,需要设置环境变量,把以下路径加入系统 PATH:
text复制C:\Users\你的用户名\miniconda3
C:\Users\你的用户名\miniconda3\Scripts
C:\Users\你的用户名\miniconda3\Library\bin
C:\Users\你的用户名\miniconda3\Library\usr\bin
C:\Users\你的用户名\miniconda3\Library\mingw-w64\bin
注意这里是 idea,如果你用的是 Anaconda,路径里的 miniconda3 换成 anaconda3 即可。加入 PATH 后重开 CMD,conda 命令能识别了,但 activate 仍可能报错。这时候执行一下:
bat复制conda init cmd.exe
conda 会修改注册表中的 Command Processor 自动运行项,让 CMD 每次启动时自动加载初始化脚本。这样你把 CMD 关掉再开,直接 conda activate 就没问题了。
2.2 PowerShell 与 Windows Terminal 的处理
现在很多人用 Windows Terminal,默认 shell 是 PowerShell。在 PowerShell 里用 conda activate,同样可能触发 CondaError。方法也很明确,执行:
powershell复制conda init powershell
执行完以后,conda 会在你的 PowerShell Profile 文件里写入初始化代码。注意这里有个坑:如果 PowerShell 的执行策略是 Restricted,Profile 里的脚本不会自动运行。你需要先放开执行策略:
powershell复制Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
这条命令的意思是:本地脚本可以运行,从网络下载的脚本必须经过签名。对个人开发机来说算是一个比较合适的折衷策略。执行策略改完以后,重新打开 PowerShell,再敲 conda activate 就会正常了。
如果你在 Windows Terminal 里的其他发行版(比如 Ubuntu/WSL)里也装了一份 conda,那要分别处理,因为 WSL 里的 shell 是 Linux 环境,跟 Windows 底下的 conda 是两套东西。这一点经常被忽略,我在内网看到有人双系统装了 conda,Windows 下能用,切到 WSL 还报 conda 找不到,就是因为两套环境互不相通。
补充一个小经验:在 Windows 上如果 conda init powershell 执行了还是报错,可以试试以管理员身份运行 PowerShell 再做一次。之前遇到过一个环境变量被组策略锁死的情况,普通用户权限下 conda 写不进去注册表,init 命令虽然提示成功,实际上什么都没改。
2.3 Linux/macOS 下的标准修复流程
Linux 和 macOS 上的问题比较统一,核心都在 shell 配置文件。以最常见的 bash 为例:
bash复制conda init bash
source ~/.bashrc
conda activate myenv
conda init bash 会往 ~/.bashrc 末尾追加一段代码块,这段代码块是整个初始化逻辑的核心,内容大概是:
bash复制# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/opt/miniconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/opt/miniconda3/etc/profile.d/conda.sh" ]; then
. "/opt/miniconda3/etc/profile.d/conda.sh"
else
export PATH="/opt/miniconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
这里有两个细节值得注意。第一,它调用了 conda shell.bash hook,这个 hook 负责生成一堆 shell 函数,其中就包括 conda() 函数和 activate 函数。第二,它设置了 fallback 机制:如果 hook 执行失败,就手动加载 conda.sh;如果 conda.sh 也不存在,才执行 PATH 追加。
很多用户只记住了第三行 export PATH=...,以为 conda init 就是改 PATH,所以遇到问题时手动把 PATH 加进去,结果 conda 命令倒是能用了,activate 还是不行。因为你跳过了 shell 函数层的加载,等于只有刀没有刀法。
如果你用的是 zsh,对应的命令是 conda init zsh,改的是 ~/.zshrc。执行完同样要 source ~/.zshrc 或者重开终端。
macOS 用户有个额外注意点:从 Catalina 开始,默认 shell 是 zsh,不是 bash。如果你在 macOS 上照着老教程执行 conda init bash,改的是 ~/.bashrc,而终端启动时实际读取的是 ~/.zprofile 和 ~/.zshrc,等于白改了。这时候应该用 conda init zsh,然后 source ~/.zshrc。
3. 深入 shell 配置,从原理上避免再次入坑
3.1 PATH 与 shell 函数的微妙关系
很多人分不清 conda 的三种状态:conda 命令可用、conda activate 可用、conda 环境被正确激活。这三种状态对 shell 环境的要求是完全不同的。
- conda 命令可用:只需要 PATH 里有 conda 的可执行目录。最粗放的方案,直接 export PATH="/path/to/miniconda3/bin:$PATH" 就能做到。
- conda activate 可用:需要 shell 中定义了 conda 函数。这个函数负责调用 conda 执行实际逻辑,然后根据返回值修改当前 shell 的环境变量。
- conda 环境被正确激活:需要 shell 捕获 conda 函数的输出并分别处理设置 PATH、CONDA_PREFIX、CONDA_DEFAULT_ENV 等变量。
看到这里你应该明白,为什么有些教程让你把 PATH 改成 conda 的安装路径,问题却没有解决。因为只解决了第一层,第二层和第三层还需要 shell 函数的配合。
我做运维排查的经验是,遇到 conda 相关报错,第一件事就是检查当前 shell 里有没有 conda() 函数:
bash复制type conda
如果返回的是 conda is a function,说明初始化代码被加载了,activate 报错大概率是其他原因。如果返回的是 conda is /opt/miniconda3/bin/conda,说明只找到了可执行程序,初始化代码没生效,问题基本定位到 shell 配置文件没加载。
这个命令在排查时非常高效,比盲目试 conda init 快得多。我之前排查一个线上脚本时,发现定时任务里 conda activate 总是失败,用 type conda 一看,返回的是路径而不是函数,再一看定时任务的 shell 环境里没有加载 .bashrc,一分钟就定位了问题。
3.2 每次打开新终端都要重新 activate 吗
新开终端后 conda 默认回到 base 环境,这是正常行为,不算报错。但如果你发现新终端里 conda 环境一直停留在之前的某个环境,或者 base 都不见了,这就有问题了。
我习惯的做法是给 .bashrc 末尾写一个自定义函数,用来快速切换常用环境:
bash复制function goenv() {
conda activate "$1" 2>/dev/null || echo "环境不存在,请先创建"
}
这样在终端里直接输 goenv myenv 就能切换,省去每次敲 conda activate 的麻烦。当然,这只是个人习惯,不是必须的。
另一个常见问题是,有人想把 conda 默认的 base 环境禁用,省得每次打开终端都看到一个 (base) 前缀。可以用:
bash复制conda config --set auto_activate_base false
执行完以后,新终端不会自动激活 base,需要用到哪个环境手动 activate 就行。这个配置适合那些不喜欢 base 抢占 PATH 的人。但要注意,如果你写的脚本明确依赖某些包安装在 base 里,禁用自动激活会导致脚本找不到包,所以别一刀切。
3.3 企业内网/离线环境下的 conda init 特例
搜索热词里出现了"conda国内镜像源"、"ubuntu安装conda"这样的词,我顺带说一下内网环境。公司内网通常不允许直连 Anaconda 官方源,很多人会手动修改 .condarc 换成镜像源。这个本身不影响 conda init,但有一个场景需要注意。
如果你是从公司内部的 Anaconda 镜像站或者离线安装包装的 conda,安装路径可能不是默认的 /opt/miniconda3,而是 /app/anaconda 或者 /home/xxx/tools/miniconda3 这样的自定义路径。conda init 在写入配置文件时,会明确记录这个路径,理论上没有问题。但如果你后来把整个 conda 目录迁移到了另一个位置,~/.bashrc 里的初始化代码还是指向旧路径,这时候就会出现一种奇特的 bug:conda 命令能执行,但 activate 报错,或者 activate 之后 import 包报错。
遇到这种情况,不要手动去改 .bashrc 里的那一大段初始化代码,直接用 conda 自带的修复命令更稳妥。先切到新的 conda 可执行文件目录,确保你敲的 conda 是新的那个:
bash复制export PATH="/new/path/miniconda3/bin:$PATH"
hash -r
然后重新初始化:
bash复制conda init bash
source ~/.bashrc
hash -r 这个命令容易被忽略。因为 shell 会缓存命令路径,你改了 PATH 之后,如果不刷新 hash,敲 conda 可能还是执行旧路径的二进制。这个和 conda 本身没关系,但却是很多环境迁移失败的元凶。
4. 非交互 shell、脚本与 CI 环境中的 activate 技巧
4.1 为什么脚本里用 conda activate 总是失败
这是一个非常经典的问题。你在终端里手动敲 conda activate test 好好的,把它写进 shell 脚本,运行的时候却报:
text复制CondaError: Run 'conda init' before 'conda activate'
根本原因在于,shell 脚本默认使用非交互模式,很多 shell 配置文件(特别是 .bashrc)不会在脚本里被加载。有人觉得终端里的 conda 能用,脚本里应该也能用,事实根本不是这么回事。
在交互式 bash 中,启动时会依次加载 /etc/profile、~/.bash_profile(或 ~/.bash_login、~/.profile)、~/.bashrc。但在非交互式 bash 中,默认不会读取 ~/.bashrc。如果你的 conda 初始化代码写在 ~/.bashrc 里,脚本里直接敲 conda activate 自然找不到 conda 函数。
解决方式主要有三种:
第一种,脚本开头显式加载 conda 初始化代码:
bash复制source /opt/miniconda3/etc/profile.d/conda.sh
conda activate test_env
推荐这种。因为 conda.sh 是 conda 自带的,路径固定,不依赖用户自己的 shell 配置。你只要把它 source 进来,conda 函数就定义好了。
第二种,在脚本开头写:
bash复制source ~/.bashrc
conda activate test_env
这种写法有副作用。.bashrc 里通常不只有 conda 配置,还有 alias、PS1 等一堆设置。脚本加载它可能带来不必要的输出,甚至影响脚本的部署逻辑。不到万不得已不推荐。
第三种,用 conda run 替代 activate:
bash复制conda run -n test_env python test.py
conda run 会在子进程中激活目标环境,然后执行后面的命令,运行完毕自动退出环境。这个方案适合一条命令跑完的场景。缺点是 conda run 在某些旧版本上存在输出缓冲问题,导致打印信息滞后。如果项目对日志实时性有要求,建议先用 conda.sh 方案。
4.2 在 .bashrc 里写 conda 脚本要注意的坑
再分享一个我踩过的坑:把 conda init 的初始化代码和自建的 conda 相关函数都写在 ~/.bashrc 里,同时你的 .bashrc 又在开头做了"防止重复加载"的判断。这个判断条件如果覆盖范围过大,可能导致 conda 初始化代码被跳过。
比如你的 .bashrc 开头有类似这样一段:
bash复制if [ -z "$BASHRC_LOADED" ]; then
export BASHRC_LOADED=1
...
fi
从逻辑上讲,这是为了避免重复加载。但因为 conda init 的代码块是在文件末尾追加的,当这个判断条件变量在子进程里已经被导出时,再次进入 bash 就会跳过整个 .bashrc 内容,conda 初始化代码也跟着被跳过了。
我之前遇到一个很隐蔽的问题:某个环境配置机器人在 SSH 登录时执行了一长串资源初始化命令,后来发现它每次都会把 conda 弄坏,排查到最后发现是它把 BASHRC_LOADED 变量导出到了全局环境,导致后续新开的 shell 全部跳过 .bashrc。
如果你也用了类似的防重复加载机制,建议把 conda 初始化代码放到防重复加载的判断之外,或者干脆在 ~/.profile 里加载 conda.sh。这样无论 .bashrc 有没有被执行到,conda 都能正常工作。
4.3 conda run 与快速任务执行的综合对比
为了方便大家快速选型,我把几种常见的 conda 环境激活方式做了一个对比,覆盖了交互式终端、脚本、定时任务等场景:
| 场景 | 推荐方式 | 注意事项 |
|---|---|---|
| 交互式终端 | source ~/.bashrc && conda activate env | 确保 init 已执行过 |
| Shell 脚本 | source .../conda.sh && conda activate env | 不依赖用户的 shell 配置 |
| 单条命令 | conda run -n env python script.py | 注意输出缓冲 |
| CI/CD 流水线 | 直接调用 env 中的 Python 绝对路径 | 最稳定,推荐 |
| 定时任务 cron | 脚本里 source conda.sh | 路径必须写绝对路径 |
针对 CI/CD 场景,我个人更推荐直接用虚拟环境里的 Python 绝对路径,比如:
bash复制/opt/miniconda3/envs/test_env/bin/python /path/to/script.py
这样连 activate 都不用,彻底跳过 shell 初始化的问题。CI 系统每次跑任务都是干净的镜像,conda 里那些 shell 配置不一定会被执行,直接用路径最省心。
5. 高频相关坑:从 init 报错到环境管理一条龙排查
5.1 conda 命令都找不到,怎么处理
很多初学者根本走不到 activate 这一步,卡在 conda 命令本身不可用。系统提示:
bash复制bash: conda: command not found
或者 Windows 下:
text复制'conda' 不是内部或外部命令,也不是可运行的程序或批处理文件。
这种情况通常是安装的时候没有勾选"Add to PATH",或者安装完以后手动改了环境变量。一般有两种发展方向。
如果你用的是 Anaconda Navigator 或者 Anaconda Prompt,这些工具内部会自己找 conda 的路径,所以即使 CMD 里敲不了 conda,Anaconda Prompt 里仍然可以。这时你可以先在 Anaconda Prompt 里执行:
bash复制conda init cmd.exe
让 conda 把配置写到 CMD 自动初始化项目里,之后 CMD 也能用了。
如果你用的是 Miniconda,安装时可以选择添加 PATH。没选的话,可以手动在系统环境变量里加上 conda 的路径。但这里又回到前面说的,只加 PATH 只能解决 conda 命令的问题,activate 的坑在后面等着你。所以建议无论哪种情况,都先确认 conda 能跑,再执行对应的 conda init。
5.2 激活之后 import 失败,和 init 有关系吗
有一种情况容易被误判为 conda init 的问题:conda activate 成功了,终端前缀也变成 (myenv),但执行 python script.py 时报错 ModuleNotFoundError,或者 import 的还是 base 环境的包。
先检查当前环境的 Python 路径:
bash复制which python
如果输出是 /opt/miniconda3/bin/python,这说明你根本没有激活成功,虽然前缀变了,但 PATH 没被正确修改。触发这个 bug 的常见原因包括:conda 版本与 shell 兼容性问题、手动改过 PATH 导致激活脚本无法正确前置环境路径、或者是 activate 之后立刻被另一个脚本重新设置了 PATH。
这种情况下,重新执行 conda init bash 再 source ~/.bashrc 有一定概率能解决。如果不行,考虑升级 conda:
bash复制conda update conda
我之前碰过一次:conda 4.8 和 zsh 5.8 的组合下,activate 提示成功,但 PATH 根本没变,升级到 conda 4.10 后问题消失。所以遇到奇怪问题,先别急着否定所有配置,版本兼容性排查要排在前面。
5.3 VS Code 和 PyCharm 不识别 conda 环境
搜索热词里出现了"vs code无法识别conda"、"pycharm添加conda虚拟环境",这个问题很多读者都问过。其实绝大部分情况不是 conda 初始化的问题,而是 IDE 配置里没有正确指定 conda 的可执行文件路径。
在 VS Code 里,如果你已经激活了 conda 环境,再启动 VS Code,它会自动继承终端的环境变量,通常能识别成功。但如果你是从桌面图标直接启动 VS Code,而系统 PATH 里没有 conda,VS Code 的 Python 扩展和终端都找不到 conda。
解决办法是在 VS Code 的 settings.json 里手动指定 Python 解释器路径:
json复制{
"python.defaultInterpreterPath": "/opt/miniconda3/envs/myenv/bin/python"
}
Windows 下路径类似:
json复制{
"python.defaultInterpreterPath": "C:\\Users\\xxx\\miniconda3\\envs\\myenv\\python.exe"
}
或者更简单,打开 VS Code 命令面板(Ctrl+Shift+P),输入 Python: Select Interpreter,从列表里选目标环境。
PyCharm 这边更直接:Settings -> Project -> Python Interpreter -> Add Interpreter -> 选 Conda Environment,填上 conda 可执行文件的路径,PyCharm 会自动扫描环境列表。如果 PyCharm 提示找不到 conda,通常是 conda 可执行文件没有被识别,手动点文件夹图标定位到 conda 的安装路径即可。
5.4 国内镜像源与 solving environment 卡住时怎么办
在热词里看到了"conda国内镜像源"和"conda中安装库一直卡在solving environment",这两个问题经常凑在一起出现。镜像源配置不当,安装包时会一直卡在 Solving Environment 阶段,这时候很多人下意识认为是网络慢了,其实很可能是因为默认源连不上,conda 在反复重试。
给 conda 配置国内源的时候,注意几个细节。首先,不要把所有频道都写成同一个镜像地址,这会导致依赖解析时跨源失败。其次,配好之后建议清理缓存:
bash复制conda clean -i
然后验证一下源是否生效:
bash复制conda config --show channels
如果一切正常,重新安装包应该快很多。
补充一个常见误操作:为了加速,有人把 defaults 从配置里删掉了。这个操作影响很大,因为很多基础包只发布在 defaults 渠道,删掉之后 conda 在解析依赖时会陷入死循环或者报错找不到包。正确的姿势是保留 defaults,同时在前面加入镜像地址,让 conda 优先从镜像拉取。
5.5 速查表:5 分钟定位 conda 相关环境问题
为了便于大家排查,我整理了下面这张速查表。碰到报错时,按图索骥,基本能快速定位:
| 症状 | 优先排查项 | 常用修复命令 |
|---|---|---|
| conda: command not found | PATH 未配置或 conda 未安装 | 手动添加 PATH,或重装 |
| CondaError: Run conda init before conda activate | shell 初始化代码缺失 | conda init bash,然后 source 配置 |
| activate 成功但 python 路径不对 | PATH 被覆盖或 conda 版本过旧 | which python,检查 PATH,升级 conda |
| 新终端不自动激活 base | auto_activate_base 配置 | conda config --set auto_activate_base true |
| 脚本里 activate 报错 | shell 非交互模式未加载配置 | source conda.sh 或使用绝对路径 |
| 安装包卡在 solving environment | 镜像源配置异常 | conda clean -i,重配 channels |
这个表没有覆盖所有情况,但覆盖面已经足够广。遇到这张表解决不了的问题,再针对性搜报错信息里的关键字段,通常能查到更具体的解释。
6. 一个来自一线的实操记录与最终感受
来一段之前帮朋友调试的真实过程。他在 Ubuntu 服务器上装完 Miniconda,执行 conda create -n test python=3.9 是成功的,接下来 conda activate test 却无论如何都报错。我远程连上去,第一件事就是执行:
bash复制type conda
返回结果是 /home/ubuntu/miniconda3/bin/conda,能确认 conda 命令存在。再执行:
bash复制grep -n "conda initialize" ~/.bashrc
没有任何输出。问题清楚了:conda init 根本没执行过。解决过程非常简单:
bash复制/home/ubuntu/miniconda3/bin/conda init bash
source ~/.bashrc
conda activate test
三行命令,问题解决。他后来问我,为什么当初安装的时候没有自动配置好?我解释了一通 shell 配置文件和 conda 初始化机制,他听完恍然大悟。
这个案例其实很有代表性。很多用户以为 conda 安装器是全自动的,装完就能用,但实际安装器为了兼容各种终端环境,只在 Anaconda Prompt 这类特定终端里保证了开箱即用。遇到问题先看 type conda 的输出,再确认配置文件内容,基本能解决 80% 的 conda init 相关报错。
另外再分享一个日常维护的习惯:定期执行 conda update conda。旧版本 conda 在处理新版 shell 时偶尔会出现兼容性问题,升级往往能顺手解决一些莫名其妙的 bug。我在升级到 conda 23.x 之后,activate 的偶发报错几乎没再出现过。
最后想说的是,conda 环境管理虽然偶尔抽风,但只要理解了它背后的 shell 配置机制,大部分问题都能快速定位。别被报错吓住,耐心按顺序排查,你会发现它比你想象的稳定得多。
