【问题标题】:Snakemake Conda environment does not seem to be activating though it says it isSnakemake Conda 环境似乎没有被激活,尽管它说它是
【发布时间】:2021-06-26 00:10:33
【问题描述】:

我正在使用 --use-conda 选项运行 Snakemake。 Snakemake 成功创建了环境,其中应该包括 pysam。我可以手动激活这个创建的环境,并在其中运行我的脚本split_strands.py,它导入模块 pysam,没有问题。但是,在运行 Snakemake 管道时,我收到以下错误日志:

Activating conda environment: /projects/ps-yeolab3/ekofman/sc_STAMP_pipeline/STAMP/workflow/.snakemake/conda/7c375b6b
/projects/ps-yeolab3/ekofman/sc_STAMP_pipeline/STAMP/workflow/scripts/split_strands.py:166: SyntaxWarning: "is not" with a literal. Did you mean "!="?
  if args.output_fwd_bam is not '-':
/projects/ps-yeolab3/ekofman/sc_STAMP_pipeline/STAMP/workflow/scripts/split_strands.py:171: SyntaxWarning: "is not" with a literal. Did you mean "!="?
  if args.output_rev_bam is not '-':
Traceback (most recent call last):
  File "/projects/ps-yeolab3/ekofman/sc_STAMP_pipeline/STAMP/workflow/scripts/split_strands.py", line 20, in <module>
    import pysam
ModuleNotFoundError: No module named 'pysam'
[Mon Mar 29 16:41:06 2021]
Error in rule split_strands:
    jobid: 0
    output: 1_split_strands/TWA1_possorted_genome_bam_MD-GTCGCGACACGAGGTA-1.bam.fwd.bam, 1_split_strands/TWA1_possorted_genome_bam_MD-GTCGCGACACGAGGTA-1.bam.rev.bam
    conda-env: /projects/ps-yeolab3/ekofman/sc_STAMP_pipeline/STAMP/workflow/.snakemake/conda/7c375b6b
    shell:
        
        python scripts/split_strands.py -i /projects/ps-yeolab3/ekofman/sc_STAMP_pipeline/STAMP/workflow/inputs/TWA1_possorted_genome_bam_MD-GTCGCGACACGAGGTA-1.bam -f 1_split_strands/TWA1_possorted_genome_bam_MD-GTCGCGACACGAGGTA-1.bam.fwd.bam -r 1_split_strands/TWA1_possorted_genome_bam_MD-GTCGCGACACGAGGTA-1.bam.rev.bam
        
        (one of the commands exited with non-zero exit code; note that snakemake uses bash strict mode!)

Shutting down, this might take some time.
Exiting because a job execution failed. Look above for error message
Nodes:        tscc-1-37

如您所见,虽然它说它是“激活 conda 环境”,但这似乎不是真的,因为随后找不到模块“pysam”,我已经验证在手动激活时会找到该模块。

这是指定规则的方式:

rule split_strands:
    input: 
        input_bam=config["samples_path"]+"{sample}",
        index=config["samples_path"]+"{sample}.bai"
    output: 
        output_fwd="1_split_strands/{sample}.fwd.bam",
        output_rev="1_split_strands/{sample}.rev.bam"
    conda:
        "envs/python2.7.yaml"
    shell:
        """
        python scripts/split_strands.py -i {input.input_bam} -f {output.output_fwd} -r {output.output_rev}
        """

我已验证哈希 7c375b6b 对应于 python2.7.yaml 中指定的适当 env。

任何想法可能会发生什么?我的规则正在运行一个集群并通过 qsub 命令提交。

【问题讨论】:

  • 尝试编写一个也使用 env 的调试规则,并将一些内容输出到您可以检查的文件中。例如,运行类似 python -c 'import sys; print(sys.prefix); print(sys.path)' &gt; env_debug.out 的 shell 命令。这可以验证加载了什么 Python 以及它在哪里搜索包。
  • @merv 确实,我现在在 env_debug.out 中看到:/home/ekofman/new_anaconda3/envs/snakemake ['', '/home/ekofman/new_anaconda3/envs/snakemake/lib/python39. zip'、'/home/ekofman/new_anaconda3/envs/snakemake/lib/python3.9'、'/home/ekofman/new_anaconda3/envs/snakemake/lib/python3.9/lib-dynload'、'/home/ekofman /new_anaconda3/envs/snakemake/lib/python3.9/site-packages'] 这些都不是代码应该在其中执行的预期 conda env。这是我最初启动 snakemake 的原始环境 (snakemake)。
  • 当我刚刚将所有必需的库添加到启动snakemake 命令的原始环境中时,一切正常。因此,从 snakemake 规则中激活 conda env 似乎确实存在问题。
  • 有点奇怪,它仍在使用您的 snakemake 环境,而不是您的 base 环境。您是否以某种方式默认激活该功能,例如通过您的~/.bashrc?您使用的是集群配置文件吗?
  • 哦,我在运行之前手动激活了它

标签: python conda snakemake samtools pysam


【解决方案1】:

事实证明,snakemake 6.0.0+ 的较新版本肯定存在一些问题。我改用了snakemake 5.8.2,一切正常。不确定到底发生了什么,但似乎与这个问题相同:https://github.com/snakemake/snakemake/issues/883

【讨论】:

  • 您是否也像在 GitHub 问题中那样手动编写 qsub ?我在 LSF 和 SLURM 系统上都使用 Snakemake+Conda(使用 cluster profiles),并且从 5.10-5.31 没有任何问题(尚未更新到更高版本)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-22
  • 1970-01-01
  • 2020-10-01
  • 2016-06-08
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
相关资源
最近更新 更多