我有一个使用snakemake的分析管道,其中一个规则需要奇点容器,而其他几个规则需要conda环境。我在 Snakefile 中需要的地方指定了“container:”和“conda:”指令。
snakemake的调用方式有点复杂。由于各种原因,我通过 conda 环境中的自定义脚本调用 Snakemake API,并在配置中指定了“use_conda=True”和“use_singularity=True”。管道过去已经完成,没有任何问题,但最近有人重新安装了管道,现在我收到以下错误:
/bin/sh: 1: conda: not found
Traceback (most recent call last):
File "/home/cfos/miniconda3/envs/CIS/lib/python3.10/site-packages/snakemake/__init__.py", line 726, in snakemake
success = workflow.execute(
File "/home/cfos/miniconda3/envs/CIS/lib/python3.10/site-packages/snakemake/workflow.py", line 978, in execute
dag.create_conda_envs(
File "/home/cfos/miniconda3/envs/CIS/lib/python3.10/site-packages/snakemake/dag.py", line 313, in create_conda_envs
env.create(dryrun)
File "/home/cfos/miniconda3/envs/CIS/lib/python3.10/site-packages/snakemake/deployment/conda.py", line 391, in create
pin_file = self.pin_file
File "/home/cfos/miniconda3/envs/CIS/lib/python3.10/site-packages/snakemake/common/__init__.py", line 192, in __get__
value = self.method(instance)
File "/home/cfos/miniconda3/envs/CIS/lib/python3.10/site-packages/snakemake/deployment/conda.py", line 107, in pin_file
f".{self.conda.platform}.pin.txt"
File "/home/cfos/miniconda3/envs/CIS/lib/python3.10/site-packages/snakemake/common/__init__.py", line 192, in __get__
value = self.method(instance)
File "/home/cfos/miniconda3/envs/CIS/lib/python3.10/site-packages/snakemake/deployment/conda.py", line 102, in conda
return Conda(self._container_img)
File "/home/cfos/miniconda3/envs/CIS/lib/python3.10/site-packages/snakemake/deployment/conda.py", line 648, in __init__
shell.check_output(
File "/home/cfos/miniconda3/envs/CIS/lib/python3.10/site-packages/snakemake/shell.py", line 63, in check_output
return sp.check_output(cmd, shell=True, executable=executable, **kwargs)
File "/home/cfos/miniconda3/envs/CIS/lib/python3.10/subprocess.py", line 420, in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
File "/home/cfos/miniconda3/envs/CIS/lib/python3.10/subprocess.py", line 524, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command ' singularity --quiet --silent exec --home /home/cfos/Programs/COVID_Illumina_Snakemake /home/cfos/Programs/COVID_Illumina_Snakemake/.snakemake/singularity/1ad1f7122bf7704a6b02b6359ede7533.simg sh -c 'conda info --json'' returned non-zero exit status 127.
如果我“手动”运行
snakemake
命令(在我的脚本之外),我会得到同样的错误,如下所示:
snakemake -j20 --use-conda --use-singularity -s /path/to/Snakefile --config [OPTIONS]
看起来
snakemake
正在检查我仅为一个规则指定的奇点容器中是否存在 conda
。这不是所需的行为,因为 conda 不在该容器内。相反,snakemake 应该检测并使用 miniconda 的系统安装,以及我运行管道的 conda 环境中的 mamba 安装。这是管道过去运行的方式,没有任何问题。
有人能解决这个问题吗?令人困惑的是,我尝试了各种版本的snakemake,包括以前运行良好的版本,但我仍然收到错误。
详情
snakemake v7.8.5
康达4.11.0
如果有助于理解我调用管道的方式:https://github.com/charlesfoster/covid-Illumina-snakemake
谢谢!
我认为这可以通过使用 conda 和 mamba 的全局奇点容器来解决:
container: "docker://continuumio/miniconda3:23.10.0-1"
不在任何规则内,而是在其自身中。
发生的情况是,尽管snakemake正在尝试使用本地奇点环境之一来激活conda。这绝对不是一个预期的问题。但是提供一个全局容器可以防止snakemake在没有它的容器中寻找conda。