在 Nextflow 中执行 Singularity 容器时激活 conda 环境

Activate conda environment on execution of Singularity container in Nextflow

我正在使用 Singularity 容器从 Nextflow 工作流管理系统执行 运行 命令。我在 Singularity 中有一个 conda 环境,当我 shell 进入容器

时我可以激活它
singularity pull shub://brucemoran/Singularity:pcgr.centos7
singularity shell brucemoran-Singularity-pcgr.centos7.img
#<inside container>
source activate pcgr

当 Nextflow 执行时,我已经定义为 source activate pcgr,我认为它应该激活 conda env。但是我收到 unbound variable HOST 警告。我认为这与变量的非激活和后续使用有关,如果环境被激活(?)。

我希望容器在执行时激活 env (pcgr)。我试过

%run
 source activate pcgr 

%post
 source activate pcgr

但这对我不起作用

singularity exec pcgr.img which pcgr.py
which: no pcgr.py in ...

我看不出这是如何完成的,但假设这很容易,而且我忽略了一些东西!

感谢帮助。

singularity中的shell在特殊的环境下运行,所以标准conda对.bashrc的修改不起作用。相反,您需要修改 $SINGULARITY_ENVIRONMENT 变量。您的 Singularity 定义文件中的这些内容应该可以工作:

# set to whatever your conda path is, I usually install to /opt
echo ". /opt/conda/etc/profile.d/conda.sh" >> $SINGULARITY_ENVIRONMENT
echo "conda activate pcgr" >> $SINGULARITY_ENVIRONMENT

这样conda环境会自动激活。如果您更喜欢在您的步骤中手动激活它,您可以省略第二行并在您的 %run 步骤中这样做。

编辑: 更改为使用 . 而不是 source 以与 /bin/sh 兼容,在下面的评论中提到