【问题标题】:Using pyenv in a snakemake rule在蛇形规则中使用 pyenv
【发布时间】:2017-06-01 19:55:41
【问题描述】:

我正在使用snakemake 处理一个漫长而复杂的管道,其中涉及一些外部编写的python2 脚本。当我尝试使用 pyenv 指定 python2 时,pyenv shell 命令失败,而 pyenv globalpyenv 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/…

标签: shell pyenv snakemake


【解决方案1】:

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

所以,要在 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 和 profile 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-18
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多