告别Python2.7!Ubuntu18.04编译安装Python3.12的避坑指南

告别Python2.7!Ubuntu18.04编译安装Python3.12的避坑指南

如果你还在Ubuntu 18.04上跟那个年迈的Python 2.7打交道,是时候来一场彻底的“版本迁徙”了。我最近刚把一台老服务器的Python环境从2.7升级到了3.12,整个过程就像给一台老爷车换上了全新的引擎和变速箱,虽然中间遇到不少坑,但跑起来的感觉真是天壤之别。这篇文章,就是我这趟“迁徙之旅”的完整记录,我会把每一步操作、每一个可能遇到的编译错误,以及如何确保系统里那些老脚本还能正常工作的经验,毫无保留地分享给你。无论你是运维工程师、开发者,还是单纯想让自己Ubuntu系统更“现代”的技术爱好者,这份指南都能帮你绕过我踩过的那些雷。

1. 为什么要在Ubuntu 18.04上手动编译Python 3.12?

Ubuntu 18.04 LTS是个经典且稳定的发行版,但它自带的Python 3.6.x版本在今天看来已经有些“力不从心”了。很多新的Python库和框架,比如FastAPI、Pydantic v2,或者一些数据科学工具链,都开始要求更高版本的Python特性支持。直接从官方仓库apt install python3.12?很遗憾,行不通。Ubuntu 18.04的默认软件源里并没有提供3.12这么新的版本。

所以,源码编译安装就成了最直接、最可控的路径。这不仅能让你用上最新的语言特性和性能优化(比如3.11引入的“Faster CPython”项目带来的显著提速),还能让你完全掌控Python的安装路径和编译选项。当然,手动编译也意味着你需要直面一些依赖问题和潜在的配置冲突,别担心,这正是本文要帮你解决的。

注意:直接替换系统默认的python命令指向是一个需要谨慎的操作,因为Ubuntu系统内部的一些工具(如aptadd-apt-repository)可能依赖特定的Python版本。我们的策略是安装一个并行的、全新的Python 3.12,并优雅地管理版本切换,而不是粗暴地覆盖。

2. 编译前的系统准备与依赖安装

在动手下载源码之前,确保你的系统环境是干净的,并且所有必要的构建工具和开发库都已就位。这一步做得好,能避免后续80%的编译错误。

首先,更新你的包管理列表并升级现有软件包是个好习惯:

sudo apt update
sudo apt upgrade -y

接下来,安装编译Python所需的核心开发工具和库。这个列表比网上很多简单教程提到的要更全面一些,特别是为了支持sslsqlite3zlib等常用模块的完整功能:

sudo apt install -y build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libbz2-dev liblzma-dev sqlite3 libsqlite3-dev

让我简单解释几个关键包的作用:

  • build-essential: 包含gcc, g++, make等基础编译工具链。
  • libssl-dev: 提供ssl模块支持,让你能用pip通过HTTPS下载包。
  • libsqlite3-dev: 提供sqlite3模块支持,很多Python应用(包括Django的默认数据库后端)依赖它。
  • libreadline-dev: 为交互式Python解释器提供命令行编辑和历史记录功能,提升使用体验。
  • libffi-dev: 用于支持cffi,这是许多底层C扩展库(如cryptography)所必需的。

你可以通过下面的命令验证一些关键的头文件是否已经存在,这能提前发现依赖是否安装成功:

ls /usr/include/openssl/ssl.h
ls /usr/include/sqlite3.h
ls /usr/include/readline/readline.h

如果这些文件都存在,那么基础环境就准备得差不多了。

3. 下载、配置与编译Python 3.12源码

现在,让我们开始正式的编译过程。我推荐在/usr/local/src目录下进行操作,这是一个存放本地编译软件源码的标准位置。

cd /usr/local/src

3.1 获取源码并解压

从Python官网下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值