告别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系统内部的一些工具(如apt、add-apt-repository)可能依赖特定的Python版本。我们的策略是安装一个并行的、全新的Python 3.12,并优雅地管理版本切换,而不是粗暴地覆盖。
2. 编译前的系统准备与依赖安装
在动手下载源码之前,确保你的系统环境是干净的,并且所有必要的构建工具和开发库都已就位。这一步做得好,能避免后续80%的编译错误。
首先,更新你的包管理列表并升级现有软件包是个好习惯:
sudo apt update
sudo apt upgrade -y
接下来,安装编译Python所需的核心开发工具和库。这个列表比网上很多简单教程提到的要更全面一些,特别是为了支持ssl、sqlite3、zlib等常用模块的完整功能:
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官网下载


2107

被折叠的 条评论
为什么被折叠?



