macOS怎么升级Python?pkg安装包与Homebrew方法对比
详细对比macOS环境下升级Python的两种主流方法:官方pkg安装包与Homebrew包管理器。涵盖完整操作步骤、路径隔离机制、优缺点对比及选型建议。
.pkg 安装包与终端包管理器 Homebrew。本文将详解两种方式的操作流程、底层路径差异及适用场景。
一、升级前的关键认知:macOS 上的 Python 路径隔离
很多初学者在 Mac 终端中输入 python3 --version 时,会发现系统已经存在一个 Python 3。在 macOS 12.3 之后,Apple 彻底移除了老旧的 Python 2.7,而随 Xcode Command Line Tools 提供的 /usr/bin/python3 属于系统工具链的一部分,受到 SIP(系统完整性保护)的严格限制。
因此,所谓“升级”,实际上是在用户可管理的目录中安装全新版本的 Python 解释器,并将该目录加入当前用户 Shell 的 PATH 环境变量中,使其优先于系统路径被检索。理解这一点能避免很多直接对系统目录执行 sudo 覆盖导致的系统故障。
二、方法一:使用 Python 官方 .pkg 安装包升级
官方安装包是最直接、对新手最友好的升级方案。Python 基金会为 macOS 提供了“universal2”架构的安装包,原生兼容 Intel 芯片与 Apple Silicon(M1/M2/M3/M4)芯片。
1. 操作步骤
-
确认芯片架构与当前版本:
打开 macOS 自带的“终端”(Terminal),输入以下命令检查硬件类型及现有版本:
uname -m python3 --version
# 输出示例: arm64 Python 3.9.6
-
下载官方安装包:
访问 Python 官方发布页(python.org/downloads/macos/),下载最新的稳定版本(例如 Python 3.12.x 或 3.13.x 的
macOS 64-bit universal2 installer.pkg 文件)。 -
运行安装向导:
双击下载好的
.pkg文件,按照屏幕提示逐步点击“继续”、“同意”许可协议。安装器会自动将新版本写入/Library/Frameworks/Python.framework/Versions/X.Y,并在/usr/local/bin建立对应的命令软链接。 -
执行证书更新脚本(关键一步):
安装完成后,Finder 会自动打开 Python 应用程序文件夹。此时必须双击运行
Install Certificates.command文件。由于 macOS 上的 Python 不直接读取系统钥匙串的根证书,若跳过此脚本,后续通过 pip 下载或在代码中使用 urllib、requests 请求 HTTPS 接口时,极易报错SSL: CERTIFICATE_VERIFY_FAILED。 -
重启终端并验证升级结果:
关闭现有终端窗口并重新打开,输入以下命令核验:
which python3 python3 --version
# 输出示例: /usr/local/bin/python3 Python 3.12.3
2. 优缺点评估
- 优点:完全由官方直接维护,附带完整的 Tkinter 驱动和官方 IDLE 编辑器;即使不熟悉终端命令也能通过界面顺利完成安装;独立于系统其它包管理系统,发生冲突风险小。
- 缺点:多版本管理较为笨重。跨次版本(如 3.11 升级至 3.12)升级时需要重新手动下载新的 pkg;旧版本文件仍保留在
/Library/Frameworks下,若要彻底卸载需要手动删除相关目录及软链接,清理成本较高。
三、方法二:使用 Homebrew 包管理器升级
对于经常进行软件开发、需要管理多个开发工具的用户,Homebrew 是 macOS 下事实上的标准包管理器。借助 Homebrew,升级 Python 只需要一条终端指令。
1. 操作步骤
-
确认 Homebrew 环境可用:
首先确保本地已安装 Homebrew:
brew --version
# 输出示例: Homebrew 4.2.15
-
更新 Homebrew 核心配方(Formulae)索引:
在执行安装或升级前,先同步最新的包元数据:
brew update
-
安装或升级 Python:
- 情况 A:此前未通过 Homebrew 安装过 Python
brew install python
这会自动拉取当前 Homebrew 默认的最新稳定版 Python(通常带有最新修订号,例如 Python 3.12)。 - 情况 B:此前已通过 Homebrew 安装过 Python
brew upgrade python
若只需要将特定固定版本升级到该版本的最新补丁,可指定对应 formula:brew upgrade python@3.12
- 情况 A:此前未通过 Homebrew 安装过 Python
-
检查 PATH 环境变量:
在搭载 Apple Silicon(M系列)芯片的 Mac 上,Homebrew 的默认二进制前缀是
/opt/homebrew/bin;在 Intel Mac 上则是/usr/local/bin。 请检查~/.zshrc文件中是否已配置好 Homebrew 的环境变量:echo $PATH
若输出中/opt/homebrew/bin排在靠前位置,则命令将默认调用 Homebrew 版 Python。若未找到,可在~/.zshrc末尾添加:eval "$(/opt/homebrew/bin/brew shellenv)"
保存后执行source ~/.zshrc即可使配置生效。 -
验证版本与底层指向:
which python3 brew info python
# 输出示例: /opt/homebrew/bin/python3 ==> python@3.12: stable 3.12.3 (bottled)
2. 优缺点评估
- 优点:更新与卸载极其简便,仅需
brew upgrade python或brew uninstall python即可完成生命周期管理;能与 openssl、readline 等常用 C 库依赖无缝协作,适合作为专业开发机的统一基础底座。 - 缺点:Homebrew 的默认
python配方会随上游周期性升级主次版本(例如从 3.11 升级至 3.12),这会导致之前安装在全局环境下的第三方包路径失效;对于需要使用原版 Tkinter/IDLE 开发图形界面的场景,Homebrew 版本的 GUI 支持不如官方 pkg 安装包完备。
四、两种升级方式核心维度对比
为了帮助读者做出清晰判断,以下针对安装、更新、隔离、清理及适用人群等核心维度展开直接对比:
| 对比维度 | 官方 .pkg 安装包 | Homebrew 包管理器 |
|---|---|---|
| 安装方式 | 图形界面向导,双击安装 | 终端命令行输入单条指令 |
| 升级机制 | 需手动前往官网下载新版本的 pkg 覆盖或并存安装 | 一条 brew upgrade python 自动拉取更新 |
| 默认安装路径 | /Library/Frameworks/Python.framework |
/opt/homebrew/Cellar (Apple Silicon) |
| 清理与卸载 | 较繁琐,需手动删除 Frameworks 及软链接 | 极简,执行 brew uninstall 即可完全清理 |
| Tkinter / GUI 支持 | 完整内置官方原生支持,开箱即用 | 默认通常不附带完整 Tcl/Tk 绑定,需单独额外配置 |
| 证书配置要求 | 需手动点击 Install Certificates.command |
自动依赖系统 certifi,无需额外手动点选 |
| 推荐适用人群 | Python 初学者、教学演示、单机脚本编写者、需要 IDLE 者 | 软件工程师、数据分析师、重度终端用户、工具链统一管理者 |
五、升级后的避坑提醒与环境维护
任何时候都不要通过
sudo cp、sudo ln -sf 或 sudo pip install 去强制覆盖 /usr/bin/python3 目录。macOS 许多系统内部组件及命令行开发者工具均依赖该特定系统解释器,强行覆盖可能引发不可逆的系统异常。
1. 善用虚拟环境(venv),避免全局包混乱
无论选用哪种方式升级,当 Python 从 3.11 升级至 3.12(或后续大版本)时,之前安装在旧版本 site-packages 目录中的第三方库均无法自动继承。最健康的开发习惯是:全局 Python 仅用于提供基础命令,具体项目一律通过独立虚拟环境管理。
# 创建并激活项目专用虚拟环境 python3 -m venv my_project_env source my_project_env/bin/activate # 此时 pip 将完全隔离在该独立环境中 pip install --upgrade pip pip install requests
2. 确认终端生效的优先级
若系统中既安装了官方 pkg,又安装了 Homebrew 版 Python,终端在输入 python3 时会严格依据 echo $PATH 从左往右寻找第一个匹配项。如果发现升级后输入 python3 仍然显示老版本号,可通过 which -a python3 打印出系统内存在的所有 python3 路径,并在 ~/.zshrc 中将期望的路径置于变量最前端。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









