无sudo权限下解决Conda环境权限及Python执行问题
解决Conda克隆环境后的权限问题及
python命令失效问题(无需Root) 听起来你遇到了克隆conda环境后双重糟心的问题:权限访问报错,连python命令都跑不起来了。别慌,我们一步步来解决,全程不需要root权限:
第一步:先恢复python命令的可执行性
这是最优先的,命令都用不了的话后续操作没法进行:
- 检查并重新激活环境
先确认你当前是否在目标环境里,执行:
看输出里带conda info --envs*的是不是你克隆的那个环境。如果不是,用conda activate <你的环境名>重新激活;如果激活报错,试试用完整路径激活:source ~/miniconda3/envs/<你的环境名>/bin/activate - 检查环境内Python文件的权限
进入你的环境bin目录(比如~/miniconda3/envs/<环境名>/bin),查看python文件的权限:
如果输出里没有cd ~/miniconda3/envs/<你的环境名>/bin ls -l pythonx(可执行权限),给自己加上:
这个操作完全不需要root,因为是你自己的环境目录。chmod +x python python3.6 - 修正PATH环境变量
有时候环境切换异常会导致系统找不到conda环境里的Python,执行echo $PATH看看你的环境bin目录是不是在最前面。如果不是,临时添加:
要是想永久生效,就把上面这行加到export PATH=~/miniconda3/envs/<你的环境名>/bin:$PATH~/.bashrc(bash用户)或~/.zshrc(zsh用户)里,然后执行source ~/.bashrc生效。
第二步:解决克隆环境的权限访问问题
搞定Python命令后,我们来处理权限报错:
- 重新克隆到个人目录(推荐)
如果你之前克隆时没指定安装位置,可能默认装到了系统级conda目录(导致权限不足)。重新克隆时明确指定安装在你的home目录下:
这样所有文件的所有者都是你,绝对不会有权限问题。conda create --name <新环境名> --file spec-file.txt --prefix ~/my_custom_envs/<新环境名> - 修复现有环境的权限
要是不想重新克隆,直接给现有环境目录递归加权限:
这里chmod -R u+rwX ~/miniconda3/envs/<你的环境名>u+rwX是给你自己加读、写、执行权限(X只会给目录和本来就有执行权的文件加,不会乱加权限),完全安全且不需要root。 - 强制重装异常依赖包
有些时候克隆的依赖包会指向原机器的路径,导致访问失败。执行conda list查看每个包的prefix列,要是发现有指向原机器的路径,就强制重装该包:
这会把包重新安装到你的当前环境里。conda install --force-reinstall <有问题的包名>
避坑提醒
- 绝对不要用
sudo conda执行任何命令!这会把环境文件的所有者改成root,导致你自己的用户完全访问不了。要是之前不小心用了,执行下面的命令把权限改回自己:
(这个命令在你的home目录下执行不需要root,因为你是home的所有者)chown -R $USER:$USER ~/miniconda3 - 确认你的conda是个人安装的,不是系统级的。如果是系统级conda,那确实可能有很多权限问题,最好自己重新装一个个人版conda到
~/miniconda3目录,全程不需要root。
内容的提问来源于stack exchange,提问作者user1315621




