2017-06-01 78 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文件和配置文件的閱讀。