美文网首页
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://github.com/pyenv/pyenv 。 目前只翻译自己感兴趣的部分,尽量会让内容...

网友评论

      本文标题:20200709-pyenv

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