Ubuntu 下 pyenv 的安装及使用

在实际工作过程中,我们可能需要同时用到多个版本的 Python,并在各个版本之间来回切换。
或者对相同的 Python 版本,在不同的项目中使用不同版本的软件包。

一、背景

系统环境:Ubuntu16.04
借助工具:pyenv
实现目标:管理不同的 Python 版本,并且隔离在不同版本下安装的第三方包。

二、安装 pyenv 的依赖库

安装 pyenv 需要依赖的库很多。

# 执行以下命令安装依赖库
# 更新源
sudo apt-get update
# 更新软件
sudo apt-get upgrade

sudo apt-get install make build-essential libssl-dev zlib1g-dev 
sudo apt-get install libbz2-dev libreadline-dev libsqlite3-dev wget curl 
sudo apt-get install llvm libncurses5-dev libncursesw5-dev 

三、安装 pyenv

pyenv 是一个 Python 版本管理工具,它能够进行全局的 Python 版本切换,也可以为单个项目提供对应的 Python 版本。

使用 pyenv 以后,可以在服务器上安装多个不同的 Python 版本。不同 Python 版本之间的切换也非常简单。

pyenv 官方地址:https://github.com/pyenv/pyenv-installer。

通常来说,安装一个开源程序需要自己编译和下载相关依赖包,但是作者提供了一个简易的安装器,只需要一条命令即可搞定安装。

curl https://pyenv.run | bash

pyenv.run 重定向到 GitHub 内的安装脚本,上面这句命令等同于:

curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

配置环境变量,将安装路径写入 ~/.bashrc

# 将以下三条语句写入 ~/.bashrc
vim .bashrc
export PATH="~/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

配置立刻生效:

source ~/.bashrc

如果路径第一个结尾是 shims 则表示成功:

echo $PATH

/home/python/.pyenv/plugins/pyenv-virtualenv/shims:/home/python/.pyenv/shims:
/home/python/.pyenv/bin:/home/python/bin:/home/python/.local/bin:/usr/local/sbin:
/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

如果想升级 pyenv:

pyenv update

如果想卸载 pyenv(pyenv 安装的默认路径为 ~/.pyenv,如果自定义安装路径则删除自定义文件夹):

rm -fr ~/.pyenv

并删除 .bashrc 下面的环境变量:

export PATH="~/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

四、使用 pyenv

1. 查看 pyenv 当前支持哪些 Python 版本

pyenv install --list

2. 列出本地 pyenv 中所有可用的 Python 版本

pyenv versions

3. 选择指定的 Python 版本

pyenv global 3.7.3  
# 查看版本
python

切换 Python 版本以后,与版本相关的依赖也会一起切换。因此,我们不用担心不同的版本在系统中是否会相互干扰。

4. 删除指定 Python 版本

pyenv uninstall 3.7.3
remove /home/python/.pyenv/versions/3.7.3? y
// 列出删除 3.7. 3后,pyenv 中所有可用的 Python 版本
pyenv versions

5. 在 pyen v中安装 Python

在安装 Python 之前,我们必须要安装 Python 所需要的依赖包,这个必须要安装:

# 1. 安装 Python 所需要的依赖包
sudo apt-get install libc6-dev gcc

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm
# 2. 安装 Python
#---------------第一种方式---------------
pyenv install 3.7.3 -v  #-v 以日志模式显示安装过程
#因为pyenv会自动到github上下载,速度超慢,所以一般会选择使用curl或者wget下载到~/.pyenv/cache下,
#然后再用pyenv安装,推荐使用第一种方式。下面是可选的安装模式。
#---------------第二种方式---------------
cd ~/.pyenv
sudo mkdir cache
wget -c http://mirrors.sohu.com/python/3.7.3/Python-3.7.3.tar.xz -P  ~/.pyenv/cache/
pyenv install 3.7.3 -v

# 3. 更新 pyenv 数据库
pyenv rehash

# 4. 列出所安装的 Python 版本
pyenv versions

#5. 切换 Python 版本
pyenv global 3.7.3

# 6. 验证版本
python

注意:

  • 使用 pyenv 管理 Python,必须是用 pyenv 安装的 Python 才行,系统以前有的,需要重新用 pyenv 安装;
  • 使用 pip 安装第三方模块时会安装到 ~/.pyenv/versions/xxx 下,不会和系统模块发生冲突;
  • 使用 pip 安装模块后,可能需要执行 pyenv rehash 更新数据库。

博文对你有帮助吗?如果有的话,想不想送我一本书呢?
  目录