
(modelscope) user@hostname:~$ conda env list
^C^Z
[4]+ Stopped ( if [ -n "${_CE_M:+x}" ] && [ -n "${_CE_CONDA:+x}" ]; then
"$CONDA_EXE" $_CE_M $_CE_CONDA "$@";
else
"$CONDA_EXE" "$@";
fi )
如上图所示,通过WSL命令进入虚拟机后,一直卡住没有反应。经查询分析,发现最可能的原因是:
🔥 根本原因:Conda 正在尝试连接
repo.anaconda.com,但被网络策略/防火墙/地区限制阻塞(不是慢,是完全卡住)
Anaconda 自 2024 年起对
repo.anaconda.com 强制执行 Terms of Service (ToS) 验证:
https://repo.anaconda.com;如果你的网络环境无法访问该域名(或被中间防火墙静默丢弃包),conda 会一直阻塞等待响应,而不是快速失败;这就是为什么
Ctrl+C 无效 —— 底层网络调用处于不可中断的等待状态。
✅ 你之前提到过遇到 ToS 问题,这正是同一类问题。
🔍 但为什么 `conda env list` 还是卡住?
可能原因:
1. **你虽然移除了 `defaults`,但某些环境或包缓存仍在触发 channel 检查**;
2. **某些插件(如 `anaconda_telemetry`)仍在后台尝试连接 Anaconda 服务**;
3. **`custom_multichannels` 仍然绑定到 `repo.anaconda.com`(见你的 config 输出)**。
✅ 终极解决方案:**在 `~/.condarc` 中显式覆盖 `default_channels` 为空或清华源**
> 💡 这样做会**彻底切断 conda 与 `repo.anaconda.com` 的所有关联**,包括 `defaults` 的后备行为。
---
conda config --show default_channels
# 应显示空列表 []
```
---
---
> 💡 如果仍卡,说明有某个插件在联网。你可以临时禁用插件:
> ```bash
> CONDA_NO_PLUGINS=1 conda env list
> ```
---
- `default_channels` 是 conda 编译时写死的 fallback,**只有在你不在 `.condarc` 中定义它时才生效**;
- 一旦你在 `.condarc` 中显式写 `default_channels: []`,conda 就会**完全忽略内置默认值**;
- `custom_multichannels`(如你配置中的 `defaults` → `repo.anaconda.com`)也会被 `custom_multichannels: {}` 覆盖。
---
### ✅ 验证是否彻底断连
你可以用 `strace` 或 `tcpdump` 观察是否有连接 `repo.anaconda.com`,但更简单的方法是:
```bash
# 临时断网测试(在 WSL 中)
sudo ip route del default
conda env list # 应该秒出,不报错
sudo dhclient # 恢复网络
```
如果断网下能正常列出环境,说明已彻底离线。