需求
Ubuntu 18.04 默認的Python3版本為Python3.6,我們想將其升級為Python3.8.
??警告
Python3升級后會破壞原先Ubuntu系統(tǒng)上的某些Python3依賴,升級前請務(wù)必考慮清楚。遇到問題后,可以參考文末方法解決。
達成的效果
-
以所有普通用戶或root用戶,在終端或腳本中運行python3時,會運行python3.8解釋器
-
以所有普通用戶或root用戶,在終端或腳本中運行pip或pip3時,會運行pip3.8包管理器
-
升級只會影響系統(tǒng)中的python3、pip3與pip命令。
-
升級不會影響到系統(tǒng)中的python命令與python2命令,也不會影響pip2命令。
升級步驟
允許使用更多Apt官方源
某些定制化的Ubuntu18.04系統(tǒng)中,只允許用戶(使用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與相關(guān)庫、頭文件
安裝Python3.8解釋器
sudo apt install python3.8
安裝相關(guān)開發(fā)庫與頭文件
sudo apt install libpython3.8-dev
將Python3.8設(shè)置為默認Python3解釋器
參考:https://unix.stackexchange.com/a/410851
將剛剛安裝的Python3.8解釋器添加到系統(tǒng)Python3解釋器的備選替代中
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
將系統(tǒng)原裝的Python3.6解釋器添加到系統(tǒng)Python3解釋器的備選替代中
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 2
展示系統(tǒng)Python3解釋器所有可選的版本
sudo update-alternatives --config python3
輸入數(shù)字后回車,將系統(tǒng)默認的Python3解釋器設(shè)置為你需要的Python3.8版本。
- 執(zhí)行
python3 --version
命令,此時應當輸出Python3.8的版本信息。 - 執(zhí)行
sudo python3 --version
命令,此時應當輸出Python3.8的版本信息。
重啟后測試一下sudo apt install
命令是否正常工作。
安裝Pip3.8包管理器
目前筆者沒有找到包含python3.8-pip的Apt源。
Python Packaging Authority(pypa)組織提供了安裝Pip的離線腳本,用戶將腳本下載后,可以在本地運行腳本安裝Pip。
切換到root用戶,我們希望進行系統(tǒng)級別安裝
su -l
下載pip安裝腳本,安裝Pip3.8包管理器
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3.8 get-pip.py
安裝完畢后切換回普通用戶
- 執(zhí)行
pip3 --version
命令,此時應當輸出適用于Python3.8的包管理器信息。 - 執(zhí)行
sudo pip3 --version
命令,此時應當輸出適用于Python3.8的包管理器信息。
問題解決
netplan 工具執(zhí)行失敗
netplan是Ubuntu上的網(wǎng)絡(luò)管理前端,依賴于Python3解釋器。我們升級Python3解釋器后,在執(zhí)行netplan
命令后可能會出現(xiàn)如下錯誤
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轉(zhuǎn)發(fā)的SSH終端單獨運行gnome-terminal
命令,報錯信息:
ImportError: cannot import name ‘_gi’ from partially initialized module ‘gi’ (most likely due to a circular import)文章來源:http://www.zghlxwxcb.cn/news/detail-724918.html
錯誤原因:找不到屬于Python3.8的gi模塊。
解決方法:https://stackoverflow.com/a/60352723/15283141文章來源地址http://www.zghlxwxcb.cn/news/detail-724918.html
su -l
apt install pkg-config libcairo2-dev libgirepository1.0-dev
pip3.8 install --ignore-installed PyGObject
exit
到了這里,關(guān)于Ubuntu 18.04 升級 Python3;以Python3.8為例的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!