解决 win11 中 Zsh 与 Conda 兼容性问题

问题描述

当在 Windows 11 系统通过 Git Bash 使用 Zsh 时,会出现以下 Conda 相关异常:

  1. 命令行提示符(prompt)无法显示当前 Conda 环境
  2. 执行 conda activate/deactivate 命令失效
  3. 使用 conda init zsh 初始化后报错:
1
(eval):10: parse error near `^M'

问题根源

Windows 与 Unix 系统的换行符差异导致:

  • Windows 使用 \r\n(回车+换行)作为换行符
  • Unix/Linux/macOS 仅使用 \n
  • Zsh 将 \r 解析为 ^M 字符引发语法错误

核心解决方案

步骤 1:修改 Conda 初始化配置

  1. 打开 ~/.zshrc 配置文件
  2. 定位由 conda init zsh 生成的配置块(通常标记为 # >>> conda initialize >>>
  3. 替换为以下优化后的配置:
1
2
3
4
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
eval "$('/c/path/to/miniconda3/Scripts/conda.exe' 'shell.zsh' 'hook' | sed -e 's/"$CONDA_EXE" $_CE_M $_CE_CONDA "$@"/"$CONDA_EXE" $_CE_M $_CE_CONDA "$@" | tr -d \x27\\r\x27/g')"
# <<< conda initialize <<<
  • sed 流编辑器处理 Conda 生成的 hook 代码
  • s/.../.../g 正则表达式替换:
    • 在原有命令后追加 | tr -d '\r' 管道操作
    • 移除 Windows 换行符 \r
  • \x27 表示单引号的十六进制转义,避免 shell 解析错误

步骤 2:应用配置变更

1
source ~/.zshrc

编码问题解决方案

应用上述修改后可能出现的编码错误:

1
UnicodeEncodeError: 'gbk' codec can't encode character '\u279c'...

解决步骤

  1. 打开 Windows 系统环境变量设置
  2. 新建系统变量:
    • 变量名:PYTHONUTF8
    • 变量值:1
  3. 重启终端会话

环境变量设置示意图

最终效果

成功配置后,Zsh 终端将具备:

  • 正常显示 Conda 环境状态
  • 支持完整的 Conda 命令操作
  • 无报错的 UTF-8 编码支持

美化后的 Zsh 终端示例

注意事项

  1. 路径 /c/path/to/miniconda3/ 需替换为实际的 Conda 安装路径
  2. 建议使用 VSCode 或 Notepad++ 等支持换行符转换的编辑器修改配置文件
  3. 若使用其他 shell 主题,可能需要额外配置环境提示符

本文解决方案参考自 Conda GitHub Issue #9922,经实践验证适用于 Windows 11 (22H2) + Git Bash (2.41.0) + Zsh (5.9) 环境组合。