MacOS上使用conda init zsh后,每次启动提示(eval):61: = not found

conda 4.6.9这个版本是问题很多啊…

问题1

首先最麻烦的一个问题是,运行完conda init zsh后,每次启动命令行的时候,会在开头报错:

1
(eval):61: = not found

起因是为了使用conda activate来切换环境,需要在命令行中对使用的shell执行conda init zsh (或者bash)。执行后,conda会在~/.zshrc(如果使用bash,则会是~/.bashrc)中将原来的export "/anaconda3/bin:$PATH"注释掉,而改成conda init相关的命令。

从说明上来看,是在conda init过程中,执行某个sh文件时执行eval命令时,出现了问题。查遍了网络,最后在GitHub issue中发现了问题的解决办法(可能是因为带有“=”的缘故,google一直搜索不到相关问题)。

问题根源在于,这个版本的conda的conda.sh文件第61行中,[]中判断语句使用了两个等号导致的。

1
if [ "${_CE_CONDA+x}" == "condax" ]; then

解决办法: 直接再MacOS的anaconda目录下搜索conda.sh修改其中的第61行,把两个等号改成一个即可。如果有多个conda.sh就都改掉也没有问题。

另一个简单粗暴的解决办法就是直接对conda进行降级:

1
conda install conda=4.6.8

问题2

问题2是在尝试解决问题1的过程中遇到的,也是conda特定版本的问题。对conda进行降级的时候发现, 会报一个关于qt包的错误:

1
2
3
4
5
6
7
ERROR conda.core.link:_execute(568): An error occurred while uninstalling package 'defaults::qt-5.9.7-h468cd18_1'.
PermissionError(1, 'Operation not permitted')
Attempting to roll back.

Rolling back transaction: done

[Errno 1] Operation not permitted: '/anaconda3/bin/Assistant.app/Contents/PkgInfo' -> '/anaconda3/bin/Assistant.app/Contents/PkgInfo.c~'

解决办法:直接去/anaconda3/pkgs中删除qt-5.9.7-h468cd18_1这个包即可。

参考:https://github.com/conda/conda/issues/8474
https://github.com/conda/conda/issues/8440