翻译自:https://github.com/pyenv/pyenv 。
目前只翻译自己感兴趣的部分,尽量会让内容丰满,完整内容还是参考文档。
它是如何工作的
理解 PATH
当你运行 python
、pip
类似命令时,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 版本( python
,pip
等)中的每个 Python 命令。
垫片 (Shims) 是一个轻量的、可执行的文件,它将命令传递 pyenv。如果 pyenv 已经安装,当运行 pip
时,操作系统会执行以下操作:
- 在路径中搜索名为
pip
的可执行文件 - 在 PATH 的开头找到名为
pip
的 pyenv shim(垫片) - 运行名为
pip
的垫片,该垫片将命令传给 pyenv
选择 Python 版本
当你执行一个 shim 时,pyenv 通过以下来源按顺序读取确定要使用的 python 版本
-
PYENV_VERSION
环境变量(如果指定),你可以敲pyenv shell
在当前的 shell 会话中设置你的环境变量。 - 当前目录(如果存在)中特定于应用程序的
python-version
文件。可以使用pyenv local
来修改当前目录的.pyhon-version
。 - 通过搜索每个父目录找到第一个
.pyhton-verison
文件(如果有),直到文件系统的 root 目录。 - 全局
$(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
- 通过 Homebrew 安装
brew update
brew install pyenv
- 然后按照 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.)。
-
检出您要安装 pyenv 的地方。 一个不错的选择是
$ HOME/.pyenv
(但您可以将其安装在其他位置)。
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
-
定义环境变量
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
-
将
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
未完。
网友评论