macOS Big Sur bash环境下shell脚本无法激活conda虚拟环境问题
问题原因
Shell脚本默认在独立的子进程中运行,脚本内对环境变量的修改(包括conda激活环境的操作)只会作用于子进程本身,脚本执行结束后子进程销毁,环境变更不会同步到运行脚本的父终端Shell,所以你看到当前环境始终停留在(base)。
解决方案
场景1:仅需要脚本内的后续操作(如pip安装、项目配置)在新环境中运行
这是绝大多数自动化环境搭建的需求,直接使用以下脚本即可:
#!/bin/bash # 提前加载conda的Shell配置 source /opt/anaconda3/etc/profile.d/conda.sh # 创建目标环境 conda create -n MASTER python=3.8.5 -y # 激活环境,此后所有python、pip、conda命令都会作用于MASTER环境 conda activate MASTER # 此处可直接添加你的后续安装/配置逻辑,示例: # pip install -r requirements.txt # 可选:验证环境的命令 # echo "当前Python路径:" && which python
使用bash setup.sh执行即可,脚本内部的所有操作都会正确作用于新建的MASTER环境,无需手动后续操作。
场景2:需要脚本执行结束后,当前终端直接进入MASTER环境
如果需要脚本执行完后当前终端的激活状态变更,必须让脚本在当前Shell进程内执行,不能启动子进程,执行命令改为:
source setup.sh
使用上述命令执行上一方案的脚本,执行结束后当前终端就会自动切换到MASTER环境。
常见失败原因说明
- 直接用
sh setup.sh/bash setup.sh执行时激活不生效:本质是子进程的环境变更无法同步到父Shell,属于Shell的正常机制,不是脚本错误。 eval $(conda shell.bash hook)报错:非交互式Shell默认不会加载用户目录下的.bash_profile配置,提前source/opt/anaconda3/etc/profile.d/conda.sh即可解决。
内容的提问来源于stack exchange,提问作者liquidRock
相关产品推荐
相关产品推荐

