需求
Ubuntu 18.04 默认的Python3版本为Python3.6,我们想将其升级为Python3.8.
⚠️警告
Python3升级后会破坏原先Ubuntu系统上的某些Python3依赖,升级前请务必考虑清楚。遇到问题后,可以参考文末方法解决。
达成的效果
-
以所有普通用户或root用户,在终端或脚本中运行python3时,会运行python3.8解释器
-
以所有普通用户或root用户,在终端或脚本中运行pip或pip3时,会运行pip3.8包管理器
-
升级只会影响系统中的python3、pip3与pip命令。
-
升级不会影响到系统中的python命令与python2命令,也不会影响pip2命令。
升级步骤
允许使用更多Apt官方源
某些定制化的Ubuntu18.04系统中,只允许用户(使用Apt)安装来自main仓库的软件包。
但是Python3.8位于universe仓库,我们需要将其添加至Apt源。
安装add-apt-repository工具,这是一个将新仓库添加进Apt源的工具
sudo apt install software-properties-common
将universe仓库添加进Apt源
sudo add-apt-repository universe
sudo apt update
源更新完毕后,我们就可以通过apt来安装Python3.8了。
安装Python3.8与相关库、头文件
安装Python3.8解释器
sudo apt install python3.8
安装相关开发库与头文件
sudo apt install libpython3.8-dev
将Python3.8设置为默认Python3解释器
参考:https://unix.stackexchange.com/a/410851
将刚刚安装的Python3.8解释器添加到系统Python3解释器的备选替代中
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
将系统原装的Python3.6解释器添加到系统Python3解释器的备选替代中
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 2
展示系统Python3解释器所有可选的版本
sudo update-alternatives --config python3
输入数字后回车,将系统默认的Python3解释器设置为你需要的Python3.8版本。
- 执行
python3 --version
命令,此时应当输出Python3.8的版本信息。 - 执行
sudo python3 --version
命令,此时应当输出Python3.8的版本信息。
重启后测试一下sudo apt install
命令是否正常工作。
安装Pip3.8包管理器
目前笔者没有找到包含python3.8-pip的Apt源。
Python Packaging Authority(pypa)组织提供了安装Pip的离线脚本,用户将脚本下载后,可以在本地运行脚本安装Pip。
切换到root用户,我们希望进行系统级别安装
su -l
下载pip安装脚本,安装Pip3.8包管理器
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3.8 get-pip.py
安装完毕后切换回普通用户
- 执行
pip3 --version
命令,此时应当输出适用于Python3.8的包管理器信息。 - 执行
sudo pip3 --version
命令,此时应当输出适用于Python3.8的包管理器信息。
问题解决
netplan 工具执行失败
netplan是Ubuntu上的网络管理前端,依赖于Python3解释器。我们升级Python3解释器后,在执行netplan
命令后可能会出现如下错误
Traceback (most recent call last): File “/usr/sbin/netplan”, line
23, in
netplan.main() File “/usr/share/netplan/netplan/cli/core.py”, line 42, in main
self.parse_args() File “/usr/share/netplan/netplan/cli/core.py”, line 35, in parse_args
import netplan.cli.commands File “/usr/share/netplan/netplan/cli/commands/init.py”, line 18, in
from netplan.cli.commands.apply import NetplanApply File “/usr/share/netplan/netplan/cli/commands/apply.py”, line 29, in
import netifaces ModuleNotFoundError: No module named ‘netifaces’
错误原因:找不到属于Python3.8的netifaces模块。
su -l
pip3 install --ignore-installed netifaces pyyaml
exit
gnome-terminal 图形终端模拟器打开失败
在图形界面点击终端图标,报错信息:
Failed to execute default Terminal Emulator. Input/output error.
用开启X11转发的SSH终端单独运行gnome-terminal
命令,报错信息:
ImportError: cannot import name ‘_gi’ from partially initialized module ‘gi’ (most likely due to a circular import)文章来源:https://www.toymoban.com/news/detail-724918.html
错误原因:找不到属于Python3.8的gi模块。
解决方法:https://stackoverflow.com/a/60352723/15283141文章来源地址https://www.toymoban.com/news/detail-724918.html
su -l
apt install pkg-config libcairo2-dev libgirepository1.0-dev
pip3.8 install --ignore-installed PyGObject
exit
到了这里,关于Ubuntu 18.04 升级 Python3;以Python3.8为例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!