核心摘要:你应该选择哪种方法?
| 场景 | 推荐方法 | 优点 | 缺点 |
|---|---|---|---|
| 新手 / 日常使用 | 使用 apt |
简单、快速,与系统集成度高 | 版本可能较旧,不适合特定项目需求 |
| 开发者 / 项目需要特定版本 | 使用 pyenv |
强烈推荐,可以轻松安装和管理多个 Python 版本,隔离性好 | 需要额外安装和配置 |
| 需要最新稳定版 | 从源码编译 | 可以获得最新的功能和性能优化 | 过程复杂,容易出错,不推荐新手 |
| 快速体验 / 临时使用 | 使用 Snap | 一键安装,自动更新,与系统隔离 | 可能存在性能或兼容性问题 |
使用 apt (适用于新手和日常使用)
这是 Ubuntu 系统自带的包管理器方式,最简单直接,它会安装 Python 3,并自动配置好 python3 命令。

更新软件包列表
在安装任何软件之前,最好先更新一下你的软件包列表,确保获取到最新的信息。
sudo apt update
安装 Python 3
执行以下命令来安装 Python 3 及其核心开发工具(如 pip 包管理器、venv 虚拟环境等)。
sudo apt install python3 python3-pip python3-venv
python3: Python 解释器本身。python3-pip: Python 的包安装工具,相当于apt但用于 Python 库。python3-venv: 创建虚拟环境的工具,强烈建议在项目中使用。
验证安装
安装完成后,检查版本号以确认安装成功。
python3 --version # 应该会输出类似 Python 3.10.6 的信息 pip3 --version # 应该会输出 pip 的版本和路径
优点:

- 简单快捷:一条命令搞定。
- 系统集成:
apt会自动处理依赖关系,并与系统其他部分良好配合。
缺点:
- 版本固定:你安装的版本是 Ubuntu 官方仓库提供的,通常不是最新的稳定版,Ubuntu 22.04 默认提供 Python 3.10,而 Python 3.12 可能已经发布。
- 权限问题:使用
pip3全局安装包时,有时需要sudo,这可能会破坏系统包的纯净性。
使用 pyenv (强烈推荐给开发者)
pyenv 是一个强大的 Python 版本管理工具,它允许你在同一台机器上轻松安装、切换和使用多个 Python 版本,而不会影响系统自带的 Python,这是专业开发者的首选。
安装 pyenv 的依赖项
在安装 pyenv 之前,需要先安装它所需要的编译工具和依赖库。
sudo apt update sudo apt install -y make build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \ libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
安装 pyenv
使用 curl 下载并执行 pyenv 的安装脚本。
curl https://pyenv.run | bash
配置 Shell 环境
安装后,你需要将 pyenv 添加到你的 Shell 配置文件中,这样每次打开终端时它都会被加载。
对于 Bash (Ubuntu 默认 Shell):
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc echo 'eval "$(pyenv init -)"' >> ~/.bashrc
对于 Zsh:
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc echo 'eval "$(pyenv init -)"' >> ~/.zshrc
重新加载 Shell 配置
执行以下命令让配置立即生效,或者关闭当前终端窗口,重新打开一个。
exec "$SHELL"
使用 pyenv 安装 Python
现在你可以使用 pyenv 安装你想要的任何 Python 版本了,安装最新的稳定版 3.12:
# 查看所有可安装的版本 pyenv install --list # 安装特定版本,Python 3.12.0 pyenv install 3.12.0
注意:编译和安装过程可能需要几分钟时间,请耐心等待。
切换 Python 版本
安装完成后,你可以轻松切换全局或当前目录的 Python 版本。
- 设置全局 Python 版本(对所有新终端生效):
pyenv global 3.12.0
- 为当前目录设置 Python 版本(创建一个
.python-version文件):pyenv local 3.12.0
- 查看当前 Python 版本:
python --version # 现在可以直接用 python,不需要 python3
优点:
- 版本管理灵活:可以同时拥有多个版本,并随时切换。
- 环境隔离:不会污染系统 Python。
- 项目级控制:可以为每个项目指定不同的 Python 版本。
缺点:
- 初始配置稍复杂:需要安装依赖和配置 Shell。
从源码编译 (适用于需要最新版)
如果你需要最新的、尚未被 apt 或 pyenv 收录的 Python 版本,可以手动从源码编译。
安装编译依赖
与方法二中的第一步相同。
sudo apt update sudo apt install -y make build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \ libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
下载 Python 源码
访问 Python 官网 获取最新版本的源码压缩包链接,然后使用 wget 下载。
# 下载 Python 3.12.0 wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz
解压并编译
# 解压 tar -xvf Python-3.12.0.tgz # 进入解压后的目录 cd Python-3.12.0 # 配置编译选项 (推荐使用 --enable-optimizations 提升性能) ./configure --enable-optimizations # 编译 (使用 -j 可以加快编译速度,-j4 使用4个核心) make -j4 # 安装 (可能需要 sudo) sudo make install
验证
python3.12 --version
优点:
- 最新版本:可以获得最新的功能和 bug 修复。
缺点:
- 过程复杂:步骤多,容易出错。
- 耗时:编译过程非常耗时。
- 依赖管理:需要自己确保所有依赖都已安装。
使用 Snap (适用于快速体验)
Snap 是一种现代化的软件打包格式,可以一键安装并自动更新。
安装 Python Snap
sudo snap install python --classic
--classic 参数允许这个 Snap 包像传统的 apt 包一样访问系统资源,这对于 Python 来说是必要的。
验证
python --version
优点:
- 简单:一条命令安装。
- 自动更新:Snap 会自动处理更新。
缺点:
- 性能:由于沙箱机制,性能可能略低于原生安装。
- 兼容性:某些与系统深度绑定的库可能不兼容。
- 体积:Snap 包通常比
apt包大。
最佳实践:为你的项目创建虚拟环境
无论你使用哪种方法安装 Python,强烈建议在开始一个新项目时,创建一个虚拟环境,这可以隔离项目依赖,避免不同项目之间的库版本冲突。
假设你已经安装了 Python 3 (通过 apt 或 pyenv),python3 命令可用:
# 1. 创建项目目录并进入 mkdir my_project cd my_project # 2. 创建一个名为 venv 的虚拟环境 python3 -m venv venv # 3. 激活虚拟环境 source venv/bin/activate # (你的终端提示符前面会出现 (venv) 字样) # 4. 在虚拟环境中安装包 (不需要 sudo) pip install requests numpy # 5. 退出虚拟环境 deactivate
当你下次需要工作时,只需 cd my_project 并再次运行 source venv/bin/activate 即可。
- 如果你只是想写点脚本,用用系统自带的
python3就完全足够了。 - 如果你是开发者,或者你的项目对 Python 版本有特定要求,请务必使用
pyenv。 这是目前最灵活、最专业的管理方式。 - 除非有特殊需求(如研究新特性),否则不建议新手从源码编译。
- Snap 是一个方便的选项,但
pyenv在灵活性上更胜一筹。
