SGE批量脚本未读取.bashrc且conda命令找不到求助
SGE集群提交任务时Conda环境无法激活的解决方法
问题描述
本地可正常使用多个Conda环境,但通过qsub向SGE集群提交任务时,.bashrc未被读取,导致以下问题:
- 报错
conda: Command not found.,甚至export这类bash基础命令也无法识别 - 手动执行
source ~/.bashrc或source ~/.bash_profile无效 - 使用
qsub -V提交时,脚本能运行但出现Conda配置错误:
CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'. To initialize your shell, run $ conda init <SHELL_NAME> Currently supported shells are: - bash - fish - tcsh - xonsh - zsh - powershell See 'conda init --help' for more information and options. IMPORTANT: You may need to close and restart your shell after running 'conda init'.
因外部原因无法使用qsub -V,希望能在批量脚本中自由切换Conda环境。
尝试将脚本shebang改为#!/bin/bash -l后,仍报错conda: Command not found.,修改后的脚本如下:
#!/bin/bash -l #$ -cwd #$ -l h_cpu=48:00:00 #$ -l h_vmem=2048M #$ -q pascal@pascal-[0123]-0[01234567] ## allocate the number of cores: #$ -pe mpi 1 setenv OMP_NUM_THREADS 1 conda activate my_env python ./test.py
解决方案
方法1:指定Conda路径并手动初始化
直接调用Conda的完整路径,同时加载Conda的初始化脚本,避免依赖shell配置文件:
#!/bin/bash #$ -S /bin/bash #$ -cwd #$ -l h_cpu=48:00:00 #$ -l h_vmem=2048M #$ -q pascal@pascal-[0123]-0[01234567] #$ -pe mpi 1 # 获取Conda根目录(无需硬编码路径) CONDA_BASE=$(/home/username/miniconda3/bin/conda info --base) # 加载Conda初始化脚本 source $CONDA_BASE/etc/profile.d/conda.sh # 激活目标环境 conda activate my_env export OMP_NUM_THREADS=4 python ./test.py
注:/home/username/miniconda3/bin/conda替换为你本地which conda输出的实际路径。
方法2:强制启用bash登录环境
在SGE参数中指定登录shell,让系统自动加载.bash_profile或.bashrc:
#!/bin/bash #$ -S /bin/bash -l #$ -cwd #$ -l h_cpu=48:00:00 #$ -l h_vmem=2048M #$ -q pascal@pascal-[0123]-0[01234567] #$ -pe mpi 1 # 若Conda初始化配置在.bashrc中,可重新加载确保生效 source ~/.bashrc conda activate my_env export OMP_NUM_THREADS=4 python ./test.py
注:将-l放在SGE的#$ -S参数后,优先级高于shebang的设置,更可靠。
方法3:用conda run直接执行命令
无需显式激活环境,直接指定环境运行脚本,跳过激活配置步骤:
#!/bin/bash #$ -S /bin/bash #$ -cwd #$ -l h_cpu=48:00:00 #$ -l h_vmem=2048M #$ -q pascal@pascal-[0123]-0[01234567] #$ -pe mpi 1 export OMP_NUM_THREADS=4 # 直接在指定环境中运行python脚本 /home/username/miniconda3/bin/conda run -n my_env python ./test.py
方法4:避免混合shell语法
确保脚本全程使用bash语法,不要混入tcsh的setenv命令:
#!/bin/bash #$ -S /bin/bash #$ -cwd #$ -l h_cpu=48:00:00 #$ -l h_vmem=2048M #$ -q pascal@pascal-[0123]-0[01234567] #$ -pe mpi 1 # 使用bash的export而非tcsh的setenv export OMP_NUM_THREADS=4 # 加载Conda初始化脚本 source /home/username/miniconda3/etc/profile.d/conda.sh conda activate my_env python ./test.py
内容的提问来源于stack exchange,提问作者deltasata
相关产品推荐
相关产品推荐

