有些时候ubuntu官方提供的那几个python版本不满足我们的使用需求,使用pyenv工具可以很方便的管理python的各个版本安装和卸载,减少了自己去浏览器下载,安装的麻烦。
目录
一. 安装配置pyenv
1. 准备工作
(1) 设置环境变量PYENV_ROOT
通过pyenv安装的python版本会在PYENV_ROOT/versions中,可按照自己需要进行定义PYENV_ROOT(默认为${HOME}/.pyenv)。
# /etc/bash.bashrc
export PYENV_ROOT="/usr/local/src/pyenv"
(2) 依赖库
pyenv在安装python时,会需要一些依赖库,下面提供一下我安装时提示缺少的库。
sudo apt install libbz2-dev libncurses5-dev libffi-dev libreadline-dev libsqlite3-dev zlib1g-dev liblzma-dev
2. 下载pyenv
个人喜欢把下载的第三方工具源码放到/usr/local/src/中,这里的路径自己随意设置。
git clone https://github.com/pyenv/pyenv.git /usr/local/src/pyenv
3. 创建pyenv软链接
为了方便执行,将pyenv启动程序链接到/usr/local/bin下。
# 创建软连接
ln -s /usr/local/src/pyenv/bin/pyenv /usr/local/bin/pyenv
默认情况下,/usr/local/bin是在$PATH中的,如果没有,可以编辑/etc/environment,将其加入进去。
# /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
二. 安装python
1. 使用pyenv在线安装
# 查看所有python版本
sun@ubuntu:~$ pyenv install --list
# 安装python3.9.1
sun@ubuntu:~$ pyenv install 3.9.1
注:
plugins/python-build/share/python-build
中有python各个版本对应的脚本文件,pyenv通过这些文件来下载对应版本的python安装包,而这些地址都是python官网的,通常情况下国内访问国外网站速度较慢或者就不能访问,文件内容如下图所示(以3.9.1为例)。
我们可以将文件中https://www.python.org/ftp/python
地址更改为国内的镜像地址(以淘宝的镜像地址为例),我这里提供一个如下shell命令进行更改,感觉挺方便的。
在/usr/local/src/pyenv/plugins/python-build/share/python-build下执行: sed -i 's/https:\/\/www.python.org\/ftp\/python/https:\/\/cdn.npmmirror.com\/binaries\/python/g' 3.9.1 |
也可以搭配grep命令,将目录中所有版本地址都改成国内地址,如下。
grep -l "https://www.python.org/ftp/python" ./* | xargs -n 1 sed -i 's/https:\/\/www.python.org\/ftp\/python/https:\/\/cdn.npmmirror.com\/binaries\/python/g'
2. 使用pyenv离线安装
(1) 下载python安装包
官网地址:https://www.python.org/downloads/
淘宝镜像:https://registry.npmmirror.com/binary.html?path=python/
下载所需版本的python包,然后拷贝到/usr/local/src/pyenv/cache
,如果没有cache目录就创建一个。
(2) 安装
#查看一下cache目录,确定包含了刚才我们下载的3.9.1安装包
sun@sun-pc:~$ ls /usr/local/src/pyenv/cache/
Python-3.8.1.tar.xz Python-3.9.1.tar.xz
#安装3.9.1
sun@sun-pc:~$ pyenv install 3.9.1
Installing Python-3.9.1...
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
Installed Python-3.9.1 to /usr/local/src/pyenv/versions/3.9.1
三. python的使用
参考下面文章,将python配置到update-alternatives候补选项中,方便多版本管理使用。
Linux系列讲解 —— 【update-alternatives】本地软件版本管理工具(以配置python为例)
四. 注意事项
(1) sudo提权操作会清除当前用户的环境变量。如果你是需要sudo提权来执行pyenv,需要把PYENV_ROOT添加到env_keep变量中,这样在sudo的环境中就不会清除PYENV_ROOT变量。
# /etc/sudoers
Defaults env_keep += "PYENV_ROOT"
(2) …