問題
ubuntu 系統(tǒng)中可能存在多個(gè) python 版本。例如在我的 ubuntu 16.04 系統(tǒng)中,通過命令
ls /usr/bin/python*
可以看到有 python2.7, python3.5 等可執(zhí)行文件,還有一些鏈接文件。
在 terminal 中輸入 python,默認(rèn)使用 python2,如何讓系統(tǒng)默認(rèn)使用 python3?
解決方案 1: 簡(jiǎn)單替換 python 命令指向的可執(zhí)行文件
在用戶 home 目錄下的 .bashrc 文件最后添加如下命令
alias python='/usr/bin/python3.5'
上邊的 python3.5 是我自己機(jī)子中的 python3 版本,讀者要先用文章開頭的那個(gè)命令確認(rèn)一下自己機(jī)子上的 python 版本號(hào),再對(duì)應(yīng)的設(shè)置上述命令。
設(shè)置好了 .bashrc 之后,更新一下
source ~/.bashrc
此時(shí)在 terminal 中輸入 python ,就可以啟動(dòng) python3 了。
這種方式實(shí)際上只是一種“障眼法”,在terminal 中輸入 python ,實(shí)際上是等價(jià)于輸入 /usr/bin/python3.5,這里的 python 只不過是 /usr/bin/python3.5 的別名 (alias).
解決方案 2:用 update-alternatives 命令
為了徹底改變系統(tǒng)中默認(rèn)使用的 python 版本,可以用 update-alternatives 命令。
首先查看一下目前系統(tǒng)中是否已經(jīng)設(shè)置了 python 的 alternatives,用如下命令:
update-alternatives --list python
如果報(bào)錯(cuò)
update-alternatives: error: no alternatives for python
說明之前沒有設(shè)置過??梢杂萌缦路椒ㄔO(shè)置
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.5 2
注意上述命令中最后的數(shù)值 1 和 2. 數(shù)值越大,優(yōu)先級(jí)越高。
上述命令中 --install 后邊的四個(gè)參數(shù)依次對(duì)應(yīng) <link> <name> <path> <priority>。通過這兩個(gè)命令,就將 python 與兩個(gè)可執(zhí)行文件 (/usr/bin/python2.7 和 /usr/bin/python3.5)對(duì)應(yīng)了起來,而且默認(rèn)使用 /usr/bin/python3.5。
此時(shí),再通過命令查看一下
update-alternatives --list python
會(huì)看到 python 的兩個(gè) alternatives
/usr/bin/python2.7
/usr/bin/python3.5
要設(shè)置 python 的版本,可以用命令
sudo update-alternatives --config python
會(huì)顯示如下列表

這里就可以選擇系統(tǒng)默認(rèn)使用的 python 版本了。默認(rèn)是優(yōu)先級(jí)較高的 python3.5,如果選擇 1, 則會(huì)切換到 python 2.7.
升級(jí)系統(tǒng) python 版本
ubuntu 16.04 自帶了 python 2.7 和 python 3.5。有些比較新的程序需要使用 3.6 以上版本。
以 python 3.6 版本為例,安裝方式如下:(參考)
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.6 python3.6-dev
此時(shí)系統(tǒng)中就有了 python 3.6 版本,可以查看 /usr/bin 文件夾是否有 python3.6,另外安裝了python3.6-dev 之后還會(huì)在 /usr/includes 文件夾中出現(xiàn) python3.6。
為了切換方便,也可以將 3.6 版本加入到上述切換系統(tǒng)中
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 3
不同版本之間的切換過程與前邊類似。
以上操作都是針對(duì) ubuntu 16.04 系統(tǒng)。在 ubuntu 18.04 系統(tǒng)中,只有 python3.6 版本。如果要添加 python2.7,可以用如下命令:
sudo apt install python2.7
安裝之后,系統(tǒng)默認(rèn) python 版本為 2.7。如果要調(diào)整版本,可以參考上邊的步驟。
安裝 pip 及升級(jí)
python 默認(rèn)不帶 pip,需要另外安裝??梢杂?apt install 方式安裝:
sudo apt install python-pip python3-pip
但是這樣安裝的 pip 版本比較舊。在后續(xù)使用 pip 安裝 module 的時(shí)候經(jīng)常會(huì)見到如下提示:
You are using pip version 9.1.1, however version 19.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
但是用 pip install --upgrade pip 升級(jí)幾乎總是失敗。
嘗試過最靠譜的安裝方式是通過 pypi 官網(wǎng)提供的 get-pip.py 文件安裝。
地址:https://pip.pypa.io/en/stable/installing/#installing-with-get-pip-py
基本步驟如下:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
如果提示版本不匹配,可以根據(jù)提示信息下載新的版本并安裝。
另外,為了提高 pip 下載 python package 的速度,可以設(shè)置 pip 使用國(guó)內(nèi)的數(shù)據(jù)源,例如采用清華的源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
總結(jié)
本文簡(jiǎn)單介紹了修改系統(tǒng) python 版本的方法。但是要提醒讀者,盡量不要改動(dòng)系統(tǒng)的 python 默認(rèn)版本,以免出現(xiàn)莫名其妙的問題,例如有些 python package 是在 python 2 中安裝的,切換到 python 3 之后就找不到對(duì)應(yīng)的 package 了。如果必須要使用某個(gè)版本的 python,最好創(chuàng)建 python 虛擬環(huán)境,在虛擬環(huán)境中指定 python 版本,這樣比較安全,不會(huì)影響到虛擬環(huán)境之外的 python 設(shè)置。關(guān)于如何創(chuàng)建 python 虛擬環(huán)境,可以參考本博客中另一篇文章。