我正在使用snakemake進行一個長而複雜的管道,它涉及一些外部編寫的python2腳本。當我嘗試用pyenv指定python2時,pyenv shell
命令失敗,而pyenv global
和pyenv 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.
...
嗨,我不使用pyenv。所以我無法幫助你知道它爲什麼不承認它。但Snakemake承認康達設定環境。所以你可以像下面的例子一樣使用它:http://snakemake.readthedocs.io/en/stable/snakefiles/deployment.html?highlight=conda。另一個解決方案是處理模塊以在shell規則內設置環境。 –
謝謝你的建議。我最終完全放棄了pyenv。我安裝了python2和python3作爲lmod模塊,並工作。 – rbrisk
我只能推薦通過conda嘗試集成包管理:http://snakemake.readthedocs.io/en/stable/snakefiles/deployment.html?highlight=conda#integrated-package-management –