Ubuntu20.04 从源代码编译安装 python3.10

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
debian 下面不用 libreadline-gplv2-dev
ubuntu22.04 已经没有 libreadline-gplv2-dev 了: E: Package 'libreadline-gplv2-dev' has no installation candidate

我把 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/downlo...
图片.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


python后端实战经验分享
Python来自荷兰,面向未来

Python 后端工程师可加:企鹅群:537131912

2.2k 声望
400 粉丝
0 条评论
推荐阅读
milvus 中的 coord 后缀和 node 后缀有什么区别? 相关文档说明在哪里?
coord 是一个进程node 也是一个进程比如一个 datanode 要接受来自外部的写入,写入都需要经过 datacoord 转发给 datanode 吗?相关文档:[链接]Q:milvus 的 coord 和 node 是什么关系?比如一个 datanode 要接受...

ponponon

数据结构与算法:二分查找
一、常见数据结构简单数据结构(必须理解和掌握)有序数据结构:栈、队列、链表。有序数据结构省空间(储存空间小)无序数据结构:集合、字典、散列表,无序数据结构省时间(读取时间快)复杂数据结构树、 堆图二...

白鲸鱼9阅读 5.4k

滚蛋吧,正则表达式!
你是不是也有这样的操作,比如你需要使用「电子邮箱正则表达式」,首先想到的就是直接百度上搜索一个,然后采用 CV 大法神奇地接入到你的代码中?

良许3阅读 1.6k

搭个ChatGPT算法模型,从哪开始?
最近 ChatGPT 很火,火到了各行各业。记得去年更多的还是码农最新体验后拿它搜代码,现在各行各业都进来体验,问它咋理财、怎么写报告和给小孩起名。😂 也因此让小傅哥在头条的一篇关于 ChatGPT 的文章都有了26万...

小傅哥6阅读 1.4k

封面图
程序员适合创业吗?
大家好,我是良许。从去年 12 月开始,我已经在视频号、抖音等主流视频平台上连续更新视频到现在,并得到了不错的评价。每个视频都花了很多时间精力用心制作,欢迎大家关注哦~考虑到有些小伙伴没有看过我的视频,...

良许3阅读 1.3k

使用kubeasz部署高可用kubernetes集群
本实验采用kubeasz作为kubernetes环境部署工具,它是一个基于二进制方式部署和利用ansible-playbook实现自动化来快速部署高可用kubernetes集群的工具,详细介绍请查看kubeasz官方。本实验用到的所有虚拟机默认软...

李朝阳4阅读 789

git/pip/easy_install/apt代理/源设置
在公司内网环境中,访问公网往往需要经过公司的代理,对于浏览器、IDE等开发工具,都提供了设置代理的配置,而git、pip、easy_install等CLI工具,则需要通过命令或配置文件进行代理设置;对于Python、Ubuntu、Mav...

乘着风1阅读 5.2k

Python 后端工程师可加:企鹅群:537131912

2.2k 声望
400 粉丝
宣传栏