强制 snakemake 在没有 --use-conda 的情况下运行 python2。

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

问题:在snakemake(python3)中,我正在运行一些用python2编写的软件,Snakemake用python3运行软件,忽略了调用python2的文件上的shebang。

在Snakemake (python3)中,我运行了一些用python2写的软件,Snakemake用python3运行软件,忽略了调用python2的文件上的shebang。 这是别人的软件,所以我不想费力地重写它来运行python3。

问题:如何强迫snakemake在python3中工作?

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

需要注意的是。

我知道 snakemake 允许用户通过以下方式强制运行特定的环境。--use-conda,并调用python2环境。但是,我不想这样做,因为这样做出来的脚本的可移植性会降低。

我已经尝试过了。

我试过在外部python脚本前加上... #!/usr/bin/env python2#!/usr/bin/python2每次都是因为Snakemake用python3而不是python2来运行它们,所以脚本失败了。 当我在shell中调用脚本时,在Snakemake之外的其他程序用python2运行。

例子:

这是snakefile:

#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"
python snakemake
1个回答
1
投票

我真的觉得你应该用conda环境来解决这个问题。我觉得你现在的做法是 "不那么可移植 "的。所以我决定在这个问题中给出两个答案,一个有conda> 一个没有conda> 希望能说服你使用conda方法:)。

不带conda

如果你的电脑上安装了python 2,那么你可以用以下两种方法来调用它。python2/usr/bin/python2

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

与康达

用conda解决这个问题需要我们制作一个环境.yaml文件。

dependencies:
  - python=2.7

现在我们必须像这样引用这个环境:

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

并使用 --use-conda 旗帜与蛇精制造。

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