UCRT64 / MSYS2 ZSH 环境下调用 Conda

1. 问题阐述

  • 问题1 (eval):11: parse error near `^M'

导致这个问题的原因是 \r, \n, \r\n 等符号无法被 MSYS2 准确识别
这个问题出在向 eval "$('/d/miniconda3/Scripts/conda.exe' 'shell.zsh' 'hook')" 配置后

在这里插入图片描述

  • 问题2 conda 命令无法使用:UnicodeEncodeError: 'gbk' codec can't encode character '\u279c'

这个问题出现在修改问题1中的配置成功将 conda 命令加入到 UCRT64 环境中之后

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
eval "$('/d/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 <<<

在这里插入图片描述

2. 问题分析与解决

  • 问题成因
    从报错的信息来看,conda命令之所以无法使用其问题根源出在编码方面,也就是说 MSYS2 中编码的环境变量是gbk,要解决这一问题只需要在使用 conda 命令时正确地配置编码的环境变量即可。
  • 问题解决
    使用zsh的别名机制,在调用conda命令的同时配置 python 的编码即可
  • 修改后的zsh配置
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
eval "$('/d/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 <<<
alias conda="PYTHONIOENCODING=utf8 conda"
  • 效果
    结果表明,conda 命令正常使用,miniconda 完整开启

在这里插入图片描述

3. 其他

  • 实际上在WndowsTerminal 中配置 MSYS2 时可以直接令其加载系统中已有的环境变量,这样也许就不存在这一问题
  • 出于隔离两个环境的目的,笔者通以配置环境变量的方式来加载各种环境变量,因此并未对这一想法进行验证
  • 使用该方法前,请尽可能使用你能接受的 conda 的新版本,这个问题的出现可能也与 conda 自身的 bug 相关,更新可能会修复某些潜在问题

参考文献

  1. I have installed MSYS2 and Anaconda3, then how can I use conda on MSYS2?
  2. Conda in Windows under MSYS2 and Zsh 的问题解决
  3. Conda in Windows under MSYS2 and Zsh line ending problems #9922
  4. Conda: UnicodeEncodeError: ‘charmap’ codec can’t encode character ‘\u2580’ in position 644: character maps to
  5. Can not activate/deactivate conda environment due to cmder lambda character not handled in conda encoder/decoder #7445
  6. Cannot activate Conda environment in Git Bash

猜你喜欢

转载自blog.csdn.net/Y1575071736/article/details/130337319
今日推荐