美文网首页
20200709-pyenv

20200709-pyenv

作者: jiaschien | 来源:发表于2020-07-09 20:27 被阅读0次

    翻译自:https://github.com/pyenv/pyenv

    目前只翻译自己感兴趣的部分,尽量会让内容丰满,完整内容还是参考文档。

    它是如何工作的

    理解 PATH

    当你运行 pythonpip 类似命令时,OS 会在目录列表中搜索以查找具有该名称的可执行文件。该目录列表位于名为 PATH 的环境变量里,列表中的每个目录用冒号分割。

    /usr/local/bin:/usr/bin:/bin
    

    略。

    理解 Shims

    pyenv 的工作原理是在你的 PATH 前插入一个 shim 目录。

    $(pyenv root)/shims:/usr/local/bin:/usr/bin:/bin
    

    通过一个称为重新哈希 (rehashing) 的过程,pyenv 在目录中维护垫片 (shims),以匹配每个已安装的 Python 版本( pythonpip 等)中的每个 Python 命令。

    垫片 (Shims) 是一个轻量的、可执行的文件,它将命令传递 pyenv。如果 pyenv 已经安装,当运行 pip时,操作系统会执行以下操作:

    • 在路径中搜索名为 pip 的可执行文件
    • 在 PATH 的开头找到名为 pip 的 pyenv shim(垫片)
    • 运行名为 pip 的垫片,该垫片将命令传给 pyenv

    选择 Python 版本

    当你执行一个 shim 时,pyenv 通过以下来源按顺序读取确定要使用的 python 版本

    1. PYENV_VERSION 环境变量(如果指定),你可以敲 pyenv shell 在当前的 shell 会话中设置你的环境变量。
    2. 当前目录(如果存在)中特定于应用程序的 python-version 文件。可以使用 pyenv local 来修改当前目录的.pyhon-version
    3. 通过搜索每个父目录找到第一个 .pyhton-verison 文件(如果有),直到文件系统的 root 目录。
    4. 全局 $(pyenv root)/version 文件。你可以通过 pyenv global 修改这个文件。如果全局版本的文件不存在,pyenv 会认为你想要使用系统预先安装的 python 版本。(换句话说,如果pyenv不在您的PATH中,则可以运行任何版本。)

    注意:略。

    定位 python 安装

    一旦 pyenv 决定了应用指定的 python 版本,pyenv 会传递 (passes) 命令到相应的 python 安装。

    每个 python 版本安装在 $(pyenv root)/versions 目录下的自己的目录中。

    例如,你可能安装如下一些版本:

    • $(pyenv root)/versions/2.7.8/
    • $(pyenv root)/versions/3.4.2/
    • $(pyenv root)/versions/pypy-2.4.0/

    就 pyenv 而言,版本名字只是 $(pyenv root)/versions 中的目录。

    管理虚拟环境

    有一个 pyenv 插件名为 pyenv-virtualenv,具有各种特性,帮助 pyenv users 管理 virtualenv 或 Anaconda 创建的虚拟环境。

    由于这些虚拟环境的 激活 脚本依赖于用户交互式 shell 突变 (mutating) 的 $PATH 变量,它将会拦截 pyenv 的 shim style command execution hooks(翻译不到了)。

    如果你打算与这些虚拟环境打交道,我们推荐安装 pyenv-virtualenv。

    安装

    Homebrew on MacOS

    1. 通过 Homebrew 安装
    brew update
    brew install pyenv
    
    1. 然后按照 Basic GitHub Checkout 下的其余所有安装后步骤,从 #3(“将 pyenv init 添加到您的 shell 中以启用填充和自动完成”功能)开始。

    自动安装

    https://github.com/pyenv/pyenv-installer

    Basic GitHub Checkout

    这将使您使用最新版本的 pyenv,并易于分叉并向上游贡献任何变更(make it easy to fork and contribute any changes back upstream.)。

    1. 检出您要安装 pyenv 的地方。 一个不错的选择是 $ HOME/.pyenv(但您可以将其安装在其他位置)。
    git clone https://github.com/pyenv/pyenv.git ~/.pyenv
    
    1. 定义环境变量 PYENV_ROOT 以指向复制的(cloned) pyenv 仓库的路径,并将$PYENV_ROOT/bin 添加到 $PATH 中以访问 pyenv 命令行实用程序。
    • Bash:
    echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
    echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
    
    • Ubuntu Desktop:
    echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
    echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
    
    • Zsh:
    echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
    echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
    
    • Fish shell:
    set -Ux PYENV_ROOT $HOME/.pyenv
    set -Ux fish_user_paths $PYENV_ROOT/bin $fish_user_paths
    
    1. pyenv init 添加到您的 shell 中以启用垫片 (shim) 和自动补齐功能。 请确保将 eval“ $(pyenv init-)” 放在 shell 配置文件的末尾,因为它在初始化期间会操纵 PATH
    echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bash_profile
    

    未完。

    相关文章

      网友评论

          本文标题:20200709-pyenv

          本文链接:https://www.haomeiwen.com/subject/tsfecktx.html