2017-06-01 49 views
2

我正在使用snakemake进行一个长而复杂的管道,它涉及一些外部编写的python2脚本。当我尝试用pyenv指定python2时,pyenv shell命令失败,而pyenv globalpyenv local不起作用。我有两个问题。在snakemake规则中使用pyenv

  • 为什么shell命令不存在?是否因为snakemake运行非登录非交互式shell?
  • 是否有可能使用pyenv在snakemake规则中切换到python2?

这是一个Snakefile示例。

rule aaa: 
    output: 
     "aaa.txt" 
    shell: 
     """ 
     pyenv versions 
     python --version 
     echo "global" 
     pyenv global 2.7.12 
     python --version 
     echo "local" 
     pyenv local 2.7.12 
     python --version 
     echo "shell" 
     pyenv shell 2.7.12 
     python --version 
     echo "pa-pa, zlyj svite" > aaa.txt 
     """ 

产生以下输出。

... 
rule aaa: 
    output: aaa.txt 
    jobid: 0 

    system 
    2.7.12 
    3.5.2 
* 3.6.1 (set by PYENV_VERSION environment variable) 
Python 3.6.1 
global 
Python 3.6.1 
local 
Python 3.6.1 
shell 
pyenv: no such command `shell' 
Error in job aaa while creating output file aaa.txt. 
... 
+1

嗨,我不使用pyenv。所以我无法帮助你知道它为什么不承认它。但Snakemake承认康达设定环境。所以你可以像下面的例子一样使用它:http://snakemake.readthedocs.io/en/stable/snakefiles/deployment.html?highlight=conda。另一个解决方案是处理模块以在shell规则内设置环境。 –

+0

谢谢你的建议。我最终完全放弃了pyenv。我安装了python2和python3作为lmod模块,并工作。 – rbrisk

+1

我只能推荐通过conda尝试集成包管理:http://snakemake.readthedocs.io/en/stable/snakefiles/deployment.html?highlight=conda#integrated-package-management –

回答

0

如果有人需要此功能,我有一个部分答案。据我所知,当snakemake生成一个shell来运行命令时,shell不会读取$HOME/.bashrc,$HOME/.bash_profile$HOME/.profile。我通过向其中一个文件添加环境变量,然后尝试使用现有的shell(即没有该变量集的shell)在Snakefile中读取其值来测试它。但是,衍生的外壳继承了当前外壳的环境。这相当于将$PYENV_ROOT/bin添加到您的$PATH而不运行pyenv init。因此,shell可以找到pyenv命令,但它不能完全运行。

因此,要在Snakefile中使用pyenv,您只需在要使用它的每个规则的开始处添加eval "$(pyenv init -)"即可。例如,以下Snakefile按预期工作。

rule aaa: 
    output: 
     "aaa.txt" 
    shell: 
     """ 
     eval "$(pyenv init -)" 
     pyenv versions 
     python --version 
     echo "shell" 
     pyenv shell 2.7.12 
     python --version 
     echo "pa-pa, zlyj svite" > aaa.txt 
     """ 

产生以下输出

... 
    system 
    2.7.12 
    3.5.2 
* 3.6.1 (set by PYENV_VERSION environment variable) 
Python 3.6.1 
shell 
Python 2.7.12 
... 

我还是不明白,为什么没有一个RC文件和配置文件的阅读。