4

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

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 ...

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

帮助表示赞赏。

4

1 回答 1

5

奇点中的 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与 with 兼容/bin/sh,在下面的评论中提到

于 2019-06-07T07:45:50.747 回答