gpt4 book ai didi

shell - 在蛇形规则中使用 pyenv

转载 作者:行者123 更新时间:2023-12-01 06:02:16 26 4
gpt4 key购买 nike

我在一个漫长而复杂的管道中使用snakemake,它涉及一些外部编写的python2脚本。当我尝试使用 pyenv 指定 python2 时,pyenv shell命令失败,而 pyenv globalpyenv local没有效果。我有两个问题。

  • 为什么是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.
    ...

    最佳答案

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

    所以,使用 pyenv在 Snakefile 中,你只需要添加 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 和配置文件。

    关于shell - 在蛇形规则中使用 pyenv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44316075/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com