Ubuntu20.04 從原始碼編譯安裝 python3.10

universe_king發表於2022-01-02

Ubuntu 22.04 Release Date

Ubuntu 22.04 Jammy Jellyfish is scheduled for release on April 21, 2022

If you’re ready to use Ubuntu 22.04 Jammy Jellyfish, you can either upgrade your current Ubuntu system or download Ubuntu 22.04 and install it from ISO.

Ubuntu22 還有幾個月就要來到了,自帶的 Python 版本將是 3.10 ,但是我想在 Ubuntu20.04 上也想用呢!

Ubuntu20.04 自帶的 Python 版本是 3.8 ,如果想安裝 python3.9 可以用該命令:sudo apt install python3.9

Ubuntu20.04 的倉庫沒有收錄 python3.10 ,那我們就自己從原始碼編譯安裝吧!

準備工作,先安裝依賴項

sudo apt update && sudo apt upgrade
sudo apt install git gcc g++ build-essential checkinstall openssl
sudo apt install uuid-dev libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev liblzma-dev libssl-dev libgdbm-compat-dev libffi-dev libreadline-dev
sudo apt install libncurses-dev libncursesw5-dev
debian 下面不用 libreadline-gplv2-dev
ubuntu22.04 已經沒有 libreadline-gplv2-dev 了: E: Package 'libreadline-gplv2-dev' has no installation candidate

如果用 ubuntu24.04

可以直接用下面的

sudo apt install git gcc g++ build-essential checkinstall openssl uuid-dev libncurses-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev liblzma-dev libssl-dev libgdbm-compat-dev libffi-dev libreadline-dev libbz2-dev liblzma-dev uuid-dev libnss-nis libnss-nisplus

我把 python3.10 原始碼壓縮包下載到 ~/Downloads 目錄下
我把 python3.10 安裝到 ~/opt/python/cpython 目錄下

關於安裝路徑的選擇問題:

Q:為什麼要放到使用者路徑而不是系統路徑?A:因為對於我來說,我只需要他跑在使用者路徑下就好了,因為這只是作為開發環境。

Q:為什麼路徑中要加 cpython?A:因為我不僅僅需要安裝 cpython 直譯器,有點時候還需要使用 pypy 直譯器等等。所以 cpython 直譯器就可以放到 ~/opt/python/cpython 目錄下;pypy 直譯器就可以放到 ~/opt/python/pypy 目錄下;
Q:多版本怎麼管理?A:cpython3.10 就這樣:~/opt/python/cpython/python3.10;cpython3.9 就這樣:~/opt/python/cpython/python3.9;pypy3.9 就這樣:~/opt/python/pypy/python3.9;非常的簡單優雅

下載 Python 原始碼

~/opt 目錄下執行下面的命令下載原始碼的壓縮包

sudo curl -O https://www.python.org/ftp/python/3.10.1/Python-3.10.1.tgz

也可以到官網去下載:https://www.python.org/downloads/release/python-3104/
圖片.png

解壓縮

tar zxvf ./Python-3.10.1.tgz
如果不是 .tgz 字尾,而是 .tar.xz,就用 tar -xvf Python-3.10.2.tar.xz 解壓

檢視

╭─bot@amd-5700G ~/Downloads
╰─➤  ll | grep Python                                                     
 6439688 drwxr-xr-x     16    -        - bot  bot    7 Dec  2021  Python-3.10.1
 6439619 .rw-rw-r--      1  25M    48952 bot  bot    2 Jan 13:58  Python-3.10.1.tgz

準備好安裝路徑

mkdir -p ~/opt/python/cpython/python3.10
mkdir 命令加上 -p 引數可以一次性建立多級目錄

安裝

cd ~/Downloads/Python-3.10.1
sudo ./configure --enable-optimizations --prefix=/home/pon/opt/python/cpython/python3.10
sudo make -j8 
sudo make install
sudo ./configure --enable-optimizations --prefix=/home/pon/opt/python/cpython/python3.10 是配置編譯引數
sudo make -j8 是編譯。-j8 表示用 8 個核心並行編譯來提高速度(預設只用一個處理器編譯,這太慢了,我們多程序並行處理:sudo make -j8,-j8 表示用 8 個處理器,如果你的處理器只有4個就改成4)
--prefix=/home/bot/opt/python/cpython/python3.10 這個千萬不能少,並且不要帶 ~,而是要絕對路徑。
sudo make install 表示安裝,就是把編譯後的結果 cpoy 到 --prefix 指定的目錄

安裝好了就是下面的樣子

╭─bot@amd-5700G ~/opt/python3.10.1
╰─➤  ll
  inode Permissions Links Size Blocks User Group Date Modified Name
6301327 drwxr-xr-x      2    -      - bot  bot    2 Jan 14:25  bin
7873931 drwxr-xr-x      3    -      - root root   2 Jan 14:25  include
6301328 drwxr-xr-x      4    -      - bot  bot    2 Jan 14:25  lib
7998483 drwxr-xr-x      3    -      - root root   2 Jan 14:25  share
╭─bot@amd-5700G ~/opt/python3.10.1
╰─➤  cd bin
╭─bot@amd-5700G ~/opt/python3.10.1/bin
╰─➤  ll
  inode Permissions Links Size Blocks User Group Date Modified Name
6305556 lrwxrwxrwx      1    9      0 root root   2 Jan 14:25  2to3 -> 2to3-3.10
6305551 .rwxr-xr-x      1  118      8 root root   2 Jan 14:25  2to3-3.10
6305554 lrwxrwxrwx      1    8      0 root root   2 Jan 14:25  idle3 -> idle3.10
6305549 .rwxr-xr-x      1  116      8 root root   2 Jan 14:25  idle3.10
6305561 .rwxr-xr-x      1  246      8 root root   2 Jan 14:25  pip3
6305562 .rwxr-xr-x      1  246      8 root root   2 Jan 14:25  pip3.10
6305555 lrwxrwxrwx      1    9      0 root root   2 Jan 14:25  pydoc3 -> pydoc3.10
6305550 .rwxr-xr-x      1  101      8 root root   2 Jan 14:25  pydoc3.10
6305552 lrwxrwxrwx      1   10      0 root root   2 Jan 14:25  python3 -> python3.10
6305553 lrwxrwxrwx      1   17      0 root root   2 Jan 14:25  python3-config -> python3.10-config
6301329 .rwxr-xr-x      1  24M  46296 root root   2 Jan 14:25  python3.10
6305548 .rwxr-xr-x      1 3.1k      8 root root   2 Jan 14:25  python3.10-config
╭─bot@amd-5700G ~/opt/python3.10.1/bin
╰─➤  ./python3.10
Python 3.10.1 (main, Jan  2 2022, 14:23:57) [GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

建立環境變數

如下面的程式碼新增環境變數

export PATH=$PATH:/home/ponponon/opt/python/cpython/python3.10/bin

如果是 bash,就新增到 ~/.bashrc
如果是 zsh,就新增到 ~/.zshenv

不要用了重新 source 一下
比如 source ~/.bashrc

參考:
【樹莓派】給ubuntu18安裝python3.7
macOS 中 zsh 配置檔案及其載入順序
Files
切換使用者後,/etc/profile的配置不起效

更換軟體源

替換為清華源

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

建立軟連線

不贅述
參考:
【樹莓派】給ubuntu18安裝python3.7

新增了環境變數之後,在終端輸入 python3.10 就可以使用 python3.10 了,但是輸入 python 出來的可能不一定是 python3.10 哦,你可以用 where pyhon 檢視。

圖片.png

使用 3.10

我一般都用 pipenv 來管理包和虛擬環境

pipenv install --python=python3.10

參考文章:
構建Python
【樹莓派】給ubuntu18安裝python3.7

相關文章