Loading... <div class="tip inlineBlock info simple"> 在开发和运维过程中,我们经常需要在不同的 Linux 发行版上安装特定版本的 Python。由于各发行版的包管理器及依赖名称不同,直接利用系统自带的软件包有时无法满足需求。本文介绍一种通用的方法:通过源码编译安装 Python,同时附上卸载步骤。这种方式基本适用于 CentOS 和 Ubuntu,并能支持大部分 Python 版本(无论是 2.x 还是 3.x),只要对应版本的源码可用。 </div> --- ## 1. 为什么选择源码安装? - **通用性高**:源码编译的方式独立于系统自带包管理器,适用于大多数 Linux 发行版; - **版本自由**:无论你需要最新版本还是历史版本,都可以从 Python 官方网站或镜像站点获取源码; - **定制性强**:可通过编译选项进行优化、定制安装目录,避免干扰系统默认的 Python 环境。 > **提示:** 如果你对编译过程不是很熟悉,也可以考虑 [pyenv](https://github.com/pyenv/pyenv) 来管理多个 Python 版本,但本文将重点介绍源码编译方法。 --- ## 2. 环境准备 不同系统的依赖包名称有所不同,下面分别列出 CentOS 和 Ubuntu 的依赖安装步骤。 ### 在 Ubuntu 上 执行以下命令安装编译所需依赖: ```bash sudo apt-get update sudo apt-get upgrade sudo apt-get install build-essential libssl-dev libffi-dev zlib1g-dev \ libncurses5-dev libncursesw5-dev libreadline-dev libsqlite3-dev \ libgdbm-dev libdb5.3-dev libbz2-dev libexpat1-dev liblzma-dev tk-dev ``` ### 在 CentOS 上 对于 CentOS 系统,首先安装开发工具组及常用依赖: ```bash sudo yum groupinstall "Development Tools" sudo yum install openssl-devel bzip2-devel libffi-devel zlib-devel ncurses-devel \ readline-devel sqlite-devel gdbm-devel db4-devel libpcap-devel xz-devel tk-devel ``` *注意:依赖包名称可能因 CentOS 版本而略有差异,请根据实际情况调整。* --- ## 3. 下载与编译 Python ### 1.下载源码 从 [Python 官方下载页面](https://www.python.org/downloads/source/) 或国内镜像站下载你需要安装的 Python 源码包。例如,下载 Python 3.7.17: ```bash wget https://www.python.org/ftp/python/3.7.17/Python-3.7.17.tgz ``` ### 2.解压源码包 ```bash tar -xf Python-3.7.12.tgz cd Python-3.7.12 ``` ### 3.配置与编译 配置时建议指定安装目录,并开启优化选项。为了避免覆盖系统默认 Python,使用 `altinstall`: ```bash ./configure --prefix=/usr/local/python3.7.17 --enable-optimizations make -j$(nproc) sudo make altinstall ``` <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-29903fad3402ce8f670cb4f44b09796925" aria-expanded="true"><div class="accordion-toggle"><span style="">【点击展开】make install与make altinstall的区别</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-29903fad3402ce8f670cb4f44b09796925" class="collapse collapse-content"><p></p> 在 Linux 系统上使用 `make altinstall`代替`make install` 主要是为了**避免覆盖系统默认的 Python 版本**。 **`make install` vs. `make altinstall`** 1. **`make install`** - 默认会安装 Python,并**创建**或**覆盖** `/usr/bin/python` 这个符号链接(symlink)。 - 可能会影响系统的默认 Python 版本,从而导致某些系统工具(如 `yum`、`dnf` 等)出问题。 2. **`make altinstall`** - **不会**创建 `/usr/bin/python` 符号链接。 - 只会安装 `pythonX.Y`(比如 `python3.9`),但不会覆盖 `python` 的默认版本。 - **适用于多版本共存**,比如安装 `Python 3.9`,但仍然保留 `Python 2.7` 作为默认版本。 **示例** ```bash ./configure --enable-optimizations make -j$(nproc) sudo make altinstall ``` 执行后: - **`python3.9` 可用**(如果编译的是 3.9)。 - **`python` 仍指向系统默认的 Python 版本**(如 2.7 或 3.6)。 **如何切换 Python 版本** 如果需要使用新安装的 Python 版本,可以: ```bash python3.9 --version alias python=python3.9 # 临时切换 sudo update-alternatives --config python # 在 Debian/Ubuntu 上修改默认版本 ``` 这样就能安装新版本 Python,同时不影响系统默认 Python。 <p></p></div></div></div> ### 4.创建软链接(可选) 如果需要方便使用,可以创建指向安装目录的软链接: ```bash sudo ln -s /usr/local/python3.7.17/bin/python3.7 /usr/local/bin/python sudo ln -s /usr/local/python3.7.17/bin/pip3.7 /usr/local/bin/pip ``` > **备注:** 同样的方法适用于其他版本。只需将下载链接、解压目录和安装路径替换成对应的版本号即可。 --- ## 4. 卸载 Python 源码编译安装通常没有自带卸载脚本,卸载时需要手动删除相关文件。 1. **删除安装目录** 例如,如果安装目录为 `/usr/local/python3.7.17`,则执行: ```bash sudo rm -rf /usr/local/python3.7.17 ``` 2. **移除软链接** 若创建了软链接,则删除它们: ```bash sudo rm /usr/local/bin/python sudo rm /usr/local/bin/pip ``` 3. **清理环境变量(如有)** 如果曾在环境变量中添加安装路径(例如修改 `.bashrc` 或 `/etc/profile`),请记得同步清理。 --- ## 5. 关于支持所有 Python 版本的问题 - **适用性:** 基于源码编译安装的方案,理论上支持绝大多数官方发布的 Python 版本。无论是 Python 2.x 还是 3.x,只要你能找到对应的源码包,都可以采用相同的安装步骤。 - **依赖差异:** 不同 Python 版本可能对依赖库的版本要求不同。建议在安装前查阅对应版本的官方文档,确保系统中的依赖满足要求。 - **注意事项:** 通过源码编译安装需要手动管理更新和补丁,如果对安全性和最新特性有要求,可以考虑利用专门的包管理工具或第三方版本管理工具(如 pyenv)来辅助管理多个版本。 --- ## 6. 总结 本文介绍的源码编译安装方法为 CentOS 和 Ubuntu 提供了一种通用的 Python 安装与卸载方案。借助这种方法,你不仅可以安装 Python 3.7,也能灵活安装其他版本,满足多版本共存的需求。虽然在不同系统中所需依赖略有不同,但整体流程一致,使得跨平台配置变得更加便捷。 希望这篇指南能为你在多平台、多版本 Python 环境的管理提供帮助。如果有任何问题或改进建议,欢迎在评论区讨论交流! 最后修改:2025 年 03 月 26 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏