我在这里撕扯我的头发,希望有人可以帮助我。
运行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
运行 - 这是预期的吗?
请帮助我!
答案 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