【Python】杂 - pyenv 系统 Python 版本管理

Posted by 西维蜀黍 on 2019-10-06, Last Modified on 2021-09-21

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