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
相关,更新可能会修复某些潜在问题
参考文献
- I have installed MSYS2 and Anaconda3, then how can I use conda on MSYS2?
- Conda in Windows under MSYS2 and Zsh 的问题解决
- Conda in Windows under MSYS2 and Zsh line ending problems #9922
- Conda: UnicodeEncodeError: ‘charmap’ codec can’t encode character ‘\u2580’ in position 644: character maps to
- Can not activate/deactivate conda environment due to cmder lambda character not handled in conda encoder/decoder #7445
- Cannot activate Conda environment in Git Bash