组合 --use-singularity 和 --use-conda 时,snakemake 出错:“/bin/sh: 1: conda: not find”

问题描述 投票:0回答:1

我有一个使用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

谢谢!

python conda snakemake
1个回答
0
投票

我认为这可以通过使用 conda 和 mamba 的全局奇点容器来解决:

container: "docker://continuumio/miniconda3:23.10.0-1"
不在任何规则内,而是在其自身中。

发生的情况是,尽管snakemake正在尝试使用本地奇点环境之一来激活conda。这绝对不是一个预期的问题。但是提供一个全局容器可以防止snakemake在没有它的容器中寻找conda。

© www.soinside.com 2019 - 2024. All rights reserved.