Background
Understanding PATH
When you run a command like python
or pip
, your operating system searches through a list of directories to find an executable file with that name. This list of directories lives in an environment variable called PATH
, with each directory in the list separated by a colon:
/usr/local/bin:/usr/bin:/bin
Directories in PATH
are searched from left to right, so a matching executable in a directory at the beginning of the list takes precedence over another one at the end. In this example, the /usr/local/bin
directory will be searched first, then /usr/bin
, then /bin
.
介绍
pyenv 是 Python 版本管理工具。 pyenv 可以改变全局的 Python 版本,安装多个版本的 Python, 设置目录级别的 Python 版本,还能创建和管理 virtual python environments 。所有的设置都是用户级别的操作,不需要 sudo 命令。
pyenv 主要用来管理 Python 的版本,比如一个项目需要 Python 2.x ,一个项目需要 Python 3.x 。 而 virtualenv 主要用来管理 Python 包的依赖,不同项目需要依赖的包版本不同,则需要使用虚拟环境。
pyenv 通过系统修改环境变量来实现 Python 不同版本的切换。而 virtualenv 通过将 Python 包安装到一个目录来作为 Python 包虚拟环境,通过切换目录来实现不同包环境间的切换。
pyenv 的美好之处在于,它并没有使用将不同的 PATH 植入不同的shell这种高耦合的工作方式,而是简单地在PATH 的最前面插入了一个垫片路径(shims)- ~/.pyenv/shims:/usr/local/bin:/usr/bin:/bin
。所有对 Python 可执行文件的查找都会首先被这个 shims 路径截获,从而使后方的系统路径失效。
步骤
1 Install pyenv
$ brew update
$ brew install pyenv
$ pyenv init
# add eval "$(pyenv init -)" to ~/.zshrc:
$ pyenv -v
pyenv 1.2.5
2 安装并管理多个Python
$ pyenv install 2.7.15
$ pyenv install 3.7.0
$ pyenv versions
system
2.7.15
* 3.7.0 (set by /Users/john/.pyenv/version)
注:星号表示当前的版本
3 切换版本
$ pyenv global 2.7.15
$ pyenv versions
system
* 2.7.15 (set by /Users/john/.pyenv/version)
3.7.0
$ python --version
Python 2.7.15
pyenv常用的命令说明:
使用方式: pyenv <命令> [<参数>]
命令:
commands 查看所有命令
local 设置或显示本地的Python版本
global 设置或显示全局Python版本
shell 设置或显示shell指定的Python版本
install 安装指定Python版本
uninstall 卸载指定Python版本)
version 显示当前的Python版本及其本地路径
versions 查看所有已经安装的版本
which 显示安装路径
注:使用local、global、shell,设置Python版本时需要跟上参数(版本号),查看则不需要。
Reference
- https://github.com/pyenv/pyenv
- 使用 pyenv 管理 Python 版本 - http://einverne.github.io/post/2017/04/pyenv.html