Ubuntu 不仅完全支持 Python,而且其版本和安装方法是开发环境配置中的核心技能。作为最流行的 Linux 发行版之一,Ubuntu 与 Python 生态深度集成,是 Python 开发的理想平台。为了清晰地说明其支持情况与具体操作,以下表格汇总了 Ubuntu 与 Python 版本关系的核心信息 [ref_3][ref_4]。
| 对比维度 | **Ubuntu 版本与 Python** | **关键说明** |
| :--- | :--- | :--- |
| **默认 Python 版本** | 随 Ubuntu 版本更新而不同。**Ubuntu 16.04 及更早版本默认安装 Python 2.x** [ref_3][ref_4]。从 **Ubuntu 18.04 LTS 开始,默认不安装 Python 2**,而是预装了 Python 3 [ref_3]。较新的版本(如 20.04, 22.04)默认安装的是 Python 3.8 或更新的版本。 | Python 2 已于 2020 年停止官方支持,新项目应使用 Python 3。对于旧系统,可以手动安装所需版本 [ref_3][ref_4]。 |
| **支持的多版本管理** | **支持**。通过 `apt`、源码编译或 `pyenv` 等工具,可以在同一台 Ubuntu 上安装并管理多个 Python 版本(如 Python 3.7, 3.8, 3.9, 3.10 等) [ref_1][ref_2]。 | 这是 Ubuntu 作为开发平台的关键特性,允许为不同项目配置不同版本的 Python 环境 [ref_1]。 |
| **包管理器 (`apt`)** | Ubuntu 自带的 `apt` 包管理器可以直接安装预编译的 Python 包。例如,运行 `sudo apt install python3 python3-pip` 即可安装 Python 3 及其包管理器 `pip` [ref_3]。 | 这是最简单快捷的安装方法,但仓库中的版本可能不是最新的 [ref_3]。 |
| **第三方仓库 (`deadsnakes` PPA)** | **支持**。对于需要安装官方仓库中没有的特定 Python 版本(如 Python 3.11),可以添加 `deadsnakes/ppa` 等第三方个人软件包存档。然后通过 `apt` 安装 [ref_3]。 | 提供了比官方仓库更丰富的 Python 版本选择 [ref_3]。 |
| **手动编译安装** | **完全支持**。对于需要特定编译选项(如开启特定模块、链接特定库)或安装最新版本,可以从 Python 官网下载源代码,在 Ubuntu 上编译安装 [ref_1][ref_4]。 | 提供最高灵活性,适合高级用户或特定需求(如为深度学习框架优化编译)。 |
| **虚拟环境支持** | **原生支持**。Python 3 内置 `venv` 模块,可以通过 `python3 -m venv myenv` 命令创建独立的虚拟环境。`virtualenv` 和 `conda` 也在 Ubuntu 上得到广泛应用 [ref_5][ref_6]。 | 虚拟环境是管理项目依赖、避免版本冲突的标准做法。PyCharm 等 IDE 也直接支持 [ref_6]。 |
| **关键依赖库** | 安装 Python 或编译扩展模块可能需要系统库。使用 `sudo apt install build-essential zlib1g-dev libssl-dev libsqlite3-dev libffi-dev libbz2-dev` 等命令可安装编译依赖 [ref_1][ref_4]。 | 这些依赖对于成功编译 Python、`pip` 安装某些二进制包(如 `python-pcl`)至关重要 [ref_5]。 |
### 一、 Ubuntu 安装 Python 的常用方法详解
根据不同的需求,可以选择多种方法在 Ubuntu 上安装 Python。对于开发者而言,推荐使用 `deadsnakes PPA` 或 `pyenv` 来获得最大的灵活性和控制力。
#### 方法一:通过 `apt` 安装系统 Python(最简单)
这是 Ubuntu 自带的安装方式,适合快速搭建通用环境或服务器部署。对于新系统,通常需要先安装 Python 3 和 pip。
```bash
# 更新软件包列表
sudo apt update
# 安装 Python 3 和 pip3
sudo apt install python3 python3-pip
# 验证安装
python3 --version
pip3 --version
```
此方法安装的版本是 Ubuntu 官方仓库中预编译好的版本。优点是简单、稳定,系统会自动管理依赖和更新。缺点是版本通常不是最新的,例如在 Ubuntu 18.04 上通过 `apt install python3` 默认安装的是 Python 3.6 [ref_3]。
#### 方法二:通过 `deadsnakes PPA` 安装特定版本(推荐)
如果需要比官方仓库更新的 Python 版本(如 3.9, 3.10, 3.11),可以使用 `deadsnakes` PPA。这是一个为 Ubuntu 维护的第三方仓库,提供了大量 Python 版本。
```bash
# 1. 添加 `deadsnakes` PPA 到系统源列表
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt update
# 2. 安装指定版本的 Python,例如 Python 3.9
sudo apt install python3.9
# 3. 安装该版本对应的 pip
sudo apt install python3.9-distutils
curl -sS https://bootstrap.pypa.io/get-pip.py | sudo python3.9
# 4. 验证安装
python3.9 --version
pip3.9 --version
```
这种方法结合了 `apt` 的便捷性和版本的多样性,是平衡易用性和灵活性的好选择 [ref_3]。
#### 方法三:手动编译安装(最灵活)
当需要自定义编译选项、安装绝对最新的版本,或为特定用途优化 Python 时,需要从源码编译。这在安装特定版本的 Python 如 3.8 并配置 SSL 支持时尤为重要 [ref_4]。以下是编译安装 Python 3.8 的详细步骤:
```bash
# 1. 安装编译依赖
sudo apt update
sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev wget libbz2-dev -y
# 2. 下载 Python 3.8 源码包(以 3.8.16 为例)
cd /tmp
wget https://www.python.org/ftp/python/3.8.16/Python-3.8.16.tgz
tar -xzf Python-3.8.16.tgz
cd Python-3.8.16
# 3. 配置编译选项,并指定安装目录(如 /usr/local/python38)。开启优化。
./configure --enable-optimizations --with-ssl-default-suites=openssl --prefix=/usr/local/python38
# 4. 编译并安装
make -j $(nproc) # $(nproc) 会自动使用所有CPU核心加速编译
sudo make altinstall # 使用 `altinstall` 防止覆盖系统默认的 python3 命令 [ref_4]
# 5. 验证安装
/usr/local/python38/bin/python3.8 --version
```
**关键点说明**:
- `--enable-optimizations`:启用优化,能提升约 10% 的运行性能。
- `--with-ssl-default-suites=openssl`:确保 Python 支持 SSL/TLS,这对 `pip` 通过 HTTPS 下载包至关重要 [ref_4]。
- `make altinstall`:用于安装多个 Python 版本。使用 `make install` 会覆盖 `/usr/bin/python3` 的链接,可能破坏系统工具 [ref_4]。
安装后,可以使用绝对路径或创建软链接来使用特定版本。
#### 方法四:使用 `pyenv` 管理多版本(最强大)
`pyenv` 是一个专门用于管理多版本 Python 的工具。它允许你在用户目录下安装多个 Python 版本,并轻松地在全局或单个项目目录间切换,非常适合开发人员 [ref_2]。
```bash
# 1. 安装 pyenv 依赖
sudo apt update
sudo apt install curl git-core gcc make zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev libssl-dev -y
# 2. 使用官方脚本安装 pyenv
curl https://pyenv.run | bash
# 3. 将 pyenv 初始化的命令添加到 Shell 配置文件中(如 ~/.bashrc)
echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init --path)"' >> ~/.bashrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc # 可选,初始化 pyenv-virtualenv 插件
source ~/.bashrc
# 4. 安装一个 Python 版本,例如 3.9.0
pyenv install 3.9.0
# 5. 设置全局或局部版本
pyenv global 3.9.0 # 设置全局默认版本为 3.9.0
pyenv local 3.9.0 # 在当前目录及其子目录下使用 3.9.0 (会在目录下生成一个 .python-version 文件)
pyenv versions # 查看所有已安装版本
# 验证
python --version
```
`pyenv` 的优势在于它隔离了系统 Python,避免了因修改系统 Python 而影响操作系统自身功能的风险。它通过修改 `PATH` 环境变量来切换版本,机制非常清晰 [ref_2]。
### 二、 处理 Python 版本切换与环境问题
在安装了多个 Python 版本后,需要正确切换。可以通过创建软链接或使用 `update-alternatives` 系统工具来实现 [ref_1]。
```bash
# 为 /usr/local/python38/bin/python3.8 创建指向 /usr/bin/python3.8 的软链接
sudo ln -s /usr/local/python38/bin/python3.8 /usr/bin/python3.8
# 或者使用 update-alternatives 进行更系统的管理
# 首先注册所有可用的 Python 版本
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 1
sudo update-alternatives --install /usr/bin/python python /usr/local/python38/bin/python3.8 2
# 然后通过交互式菜单进行选择
sudo update-alternatives --config python
```
执行 `--config` 命令后,终端会列出所有已注册的版本及其优先级,输入对应编号即可切换系统的 `python` 命令指向 [ref_1]。
### 三、 为项目创建虚拟环境
强烈建议为每个项目创建独立的虚拟环境,这是解决依赖冲突的最佳实践。Ubuntu 系统 Python 内置了 `venv` 模块。
```bash
# 假设已通过 pyenv 或 apt 安装了 python3.8
python3.8 -m venv my_project_env
# 激活虚拟环境
source my_project_env/bin/activate
# 激活后,所有 pip 安装的包都会局限于此环境
pip install requests numpy pandas
# 退出虚拟环境
deactivate
```
如果遇到类似 PyCharm 创建虚拟环境时提示 `Non-zero exit code (127)` 的错误,通常是因为指定的 Python 解释器路径(如 `python3.5`)在系统中不存在或被破坏。解决方法是在系统中安装一个兼容的 Python 版本(如 `python3.6`)并确保其可执行文件位于标准路径 [ref_6]。
对于复杂的依赖安装,如特定版本的 `python-pcl`,有时会遇到二进制包不兼容或 numpy 版本过新的问题。解决方案包括:
1. **源码安装**:下载源代码包,手动编译安装 [ref_5]。
2. **降级依赖**:如 `pip install numpy==1.19.5` 来适配旧的二进制包 [ref_5]。
3. **使用 `conda`**:`conda` 包管理器在处理包含 C/C++ 扩展的科学计算包时,通常能更好地解决系统依赖。
**结论**:Ubuntu 对 Python 的支持是全面且成熟的。从最简单的 `apt` 安装到使用 `pyenv` 进行多版本隔离管理,再到虚拟环境的构建,Ubuntu 提供了一整套完整的工具链来满足从入门到专业的不同需求。针对“复现 GitHub 项目”这一具体场景,推荐使用 `pyenv` 安装项目指定的 Python 版本,并在项目目录下创建独立的虚拟环境来管理依赖,这是保证环境一致性、避免污染系统环境的最佳实践 [ref_1][ref_2]。