Snakemake:我一直在获取$ PATH中没有'conda'命令。在SGE集群上运行时

时间:2018-04-05 20:09:31

标签: conda snakemake environment-modules

我在这里撕扯我的头发,希望有人可以帮助我。

运行snakemake 4.8.0

我有一个snakemake管道,我使用两个conda envs和--use-conda运行,它在作为独立管道运行时工作正常。

但是,当我在群集上运行时,我收到错误:

“'conda'命令在$ PATH中不可用。”

现在。 Anaconda安装在我们的集群上,但我们需要在节点上激活它:

module load anaconda

此外,模块被定义为一个函数,所以我先做了几件事。因此,在我的snakefile的顶部,我有:

shell.prefix("source $HOME/.bashrc; source /etc/profile; module load anaconda; )

这不能解决问题。

我甚至将module load anaconda放在我的.bashrc中,但仍然无效。仅在集群执行时,我收到有关未找到conda的错误。

我的.bashrc的其他更改被拾取并被snakemake接收,因此我不知道为什么它会出现问题。

我甚至创建了一个conda env,将snakemake和conda加载到该env中,在提交脚本和Snakefile中激活env:

shell.prefix("source $HOME/.bashrc; source /etc/profile; module load anaconda; source activate MAGpy-3.5; ")

而且仍然说“'conda'命令在$ PATH中不可用。”

直接撕掉我的头发。

顺便说一句,我使用qsub -S /bin/bash提交并使用shell.executable("/bin/bash"),但.snakemake中创建的临时shell脚本由/bin/sh运行 - 这是预期的吗?

请帮助我!

4 个答案:

答案 0 :(得分:2)

我总是要使用:

set +u; {params.env}; set -u

(其中{params.env}正在从我的config.yaml加载一个conda命令)

在Snakefile的shell命令中调用conda环境时,因为Snakemake会自动使用set +u添加shell命令。

不确定这是否能解决您的问题,但值得一试?

答案 1 :(得分:0)

您可以提供自定义的“jobscript模板”,您试过吗?默认值如下所示:

#!/bin/sh
# properties = {properties}
{exec_job}

所以也许你的看起来像这样:

#!/bin/bash
# properties = {properties}
module add anaconda
{exec_job}

然后在运行snakemake时使用--jobscript参数引用此文件。

P.S。如果您查看代码,则{exec_job}会在没有任何python -m snakemake设置的情况下调用PATH来填充,我认为这会导致您看到的错误。

答案 2 :(得分:0)

module所做的通常只是修改PATH和其他环境变量。对于conda环境和source activate

也是如此

例如,在我们的集群上,QIIME2安装在conda环境中,但其模块文件是

prepend-path    PATH            /opt/sw/qiime/2.2018.2/bin
prepend-path    PYTHONPATH      /opt/sw/qiime/2.2018.2/lib/python3.5/site-packages

而我们的conda模块文件是

prepend-path    PATH            /opt/sw/conda/3/bin

假设MAGpy-3.5是你的conda环境,你可以

(a)为你的MAGpy管道创建一个模块并加载它,忽略它是一个conda环境或

(b)使用修改后的PATH运行snakemake(我不知道snakemake如何处理环境变量)

(c)在.bashrc

中添加conda安装路径或MAGpy安装路径

(b)和(c)都失败了模块系统IMO的目的,但我发现anaconda本身 多余的modulefiles。在我们的群集中,当我们使用anaconda安装某些软件时,我们永远不会让用户使用source activate加载它们,而是为那些人写modulefiles

答案 3 :(得分:0)

我遇到了同样的问题,并通过将提交文件中的路径导出到(隐藏的)conda 目录来解决该问题,该目录通常位于您的主目录中。例如

export PATH=/home/yourusername:$PATH