【发布时间】:2017-06-01 19:55:41
【问题描述】:
我正在使用snakemake 处理一个漫长而复杂的管道,其中涉及一些外部编写的python2 脚本。当我尝试使用 pyenv 指定 python2 时,pyenv shell 命令失败,而 pyenv global 和 pyenv local 无效。我有两个问题。
- 为什么没有
shell命令?是因为snakemake 运行的是非登录非交互式shell? - 是否可以在使用 pyenv 的蛇形规则中切换到 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 识别 conda 来设置环境。所以你可以像下面的例子一样使用它:snakemake.readthedocs.io/en/stable/snakefiles/…。另一个可行的解决方案是处理模块以在 shell 规则中设置环境。
-
感谢您的建议。我最终完全放弃了 pyenv。我将 python2 和 python3 安装为 lmod 模块并且工作正常。
-
我只能推荐通过 conda 尝试集成包管理:snakemake.readthedocs.io/en/stable/snakefiles/…