强制snakemake在规则中运行python2而不使用conda

2024-03-29 05:36:11 发布

您现在位置:Python中文网/ 问答频道 /正文

问题:

在snakemake(python3)中,我正在运行一些用python2编写的软件。Snakemake使用python3运行软件,忽略调用python2的文件上的shebang。这是其他人的软件,所以我不想为了在python3中工作而费心重写它

问题:

如何强制snakemake在外部脚本的shebang中运行python版本,而不是在当前环境中运行python版本

注意事项:

我知道snakemake允许用户使用--use-conda强制特定环境,并调用python2环境。但是,我不想这样做,因为生成的脚本的可移植性较差

我所尝试的:

我尝试过用#!/usr/bin/env python2#!/usr/bin/python2来预先编写外部python脚本,每次脚本都失败了,因为Snakemake使用python3而不是python2来运行它们。在snakemake之外,当我从shell调用脚本时,其他带有这些shebang的程序在python2中运行

例如:

这是蛇形档案:

#snakefile
rule all:
    input:
        my_output.txt
rule foo:
    output:
        txt = my_output.txt
    shell:
        """
        external_program.py > {output.txt}
        """

这是external_program.py

#!/usr/bin/env python2

print "this will work in python2, but not python3"

Tags: 版本envtxt脚本outputbin软件环境
1条回答
网友
1楼 · 发布于 2024-03-29 05:36:11

我真的认为你应该通过使用conda环境来解决这个问题。我认为你目前的方法是“不太便携”的。所以我决定在这个问题上给出两个答案,一个有,一个没有,conda>;希望我能说服你使用康达方法:)

没有康达

如果您的计算机上安装了python 2,那么您可能可以使用python2/usr/bin/python2调用它

rule foo:
    output:
        txt = my_output.txt
    shell:
        """
        python2 external_program.py > {output.txt}
        """

和康达

使用conda解决此问题需要我们制作一个environment.yaml文件:

dependencies:
  - python=2.7

现在,我们必须像这样参考这个环境:

rule foo:
    output:
        txt = my_output.txt
    conda: "environment.yaml"
    shell:
        """
        python2 external_program.py > {output.txt}
        """

并对snakemake使用 use-conda标志

相关问题 更多 >