我正在使用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 –