Ubuntu 18.04 升级 Python3;以Python3.8为例

该文详细介绍了如何在Ubuntu18.04系统上安全地将默认的Python3.6升级到Python3.8,包括安装Python3.8、设置为默认解释器、安装pip3.8,以及解决升级后可能遇到的netplan和gnome-terminal相关问题。
摘要由CSDN通过智能技术生成

需求

Ubuntu 18.04 默认的Python3版本为Python3.6,我们想将其升级为Python3.8.

⚠️警告

Python3升级后会破坏原先Ubuntu系统上的某些Python3依赖,升级前请务必考虑清楚

  • 您的需求能否通过 Virtualenv / Conda 这类虚拟环境解决?
  • 您是否一定要全局安装新版本的Python3?是否可以从源码构建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)

错误原因:找不到属于Python3.8的gi模块。
解决方法:https://stackoverflow.com/a/60352723/15283141

su -l
apt install pkg-config libcairo2-dev libgirepository1.0-dev
pip3.8 install --ignore-installed PyGObject
exit
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值