5. 在 macOS 上使用 Python

本文档旨在概述您在 Mac 计算机上开始使用 Python 时应该了解的 macOS 特定行为。在运行 macOS 的 Mac 上使用 Python 与在其他 Unix 衍生平台上使用 Python 非常相似,但在安装和某些功能上存在一些差异。

有多种方法可以获取和安装适用于 macOS 的 Python。从许多分发商处可以获得最新版本 Python 的预构建版本。本文档的大部分内容描述了使用 CPython 发布团队提供的 Python,这些 Python 可以从 python.org 网站下载。有关其他选项,请参阅其他发行版

5.1. python.org 使用 macOS 的 Python

5.1.1. 安装步骤

对于当前 Python 版本security 状态的版本除外),发布团队为每个新版本生成一个 适用于 macOS 的 Python 安装程序包。可在此处找到可用安装程序的列表。我们建议尽可能使用最新的受支持 Python 版本。当前的安装程序提供 Python 的universal2 二进制版本,该版本可以在所有 Mac(Apple Silicon 和 Intel)上原生运行,并且支持 macOS 的广泛版本,目前通常至少从 macOS 10.13 High Sierra 开始。

下载的文件是标准的 macOS 安装程序包文件 (.pkg)。每个文件的文件完整性信息(校验和、大小、sigstore 签名等)都包含在发布下载页面上。安装程序包及其内容使用 Python Software Foundation Apple Developer ID 证书进行签名和公证,以满足 macOS Gatekeeper 要求

对于默认安装,双击下载的安装程序包文件。这将启动标准的 macOS 安装程序应用程序,并显示几个安装程序窗口步骤中的第一个。

../_images/mac_installer_01_introduction.png

单击“继续”按钮将显示此安装程序的 自述文件。除了其他重要信息外,自述文件还记录了将要安装的 Python 版本以及它支持的 macOS 版本。您可能需要滚动浏览才能读取整个文件。默认情况下,此 自述文件也将安装在 /Applications/Python 3.13/ 中,并且可以随时读取。

../_images/mac_installer_02_readme.png

单击“继续”将显示 Python 和其他包含的软件的许可证。然后,您需要“同意”许可条款才能继续下一步。此许可证文件也将被安装,并且可以稍后读取。

../_images/mac_installer_03_license.png

接受许可条款后,下一步是“安装类型”显示。对于大多数用途,标准的安装操作集是合适的。

../_images/mac_installer_04_installation_type.png

通过按下“自定义”按钮,您可以选择省略或选择安装程序的某些包组件。单击每个包名称以查看其安装内容的描述。要同时安装对可选的实验性自由线程功能的支持,请参阅安装自由线程二进制文件

../_images/mac_installer_05_custom_install.png

在任何一种情况下,单击“安装”都会通过请求安装新软件的权限来开始安装过程。需要具有Administrator 特权的 macOS 用户名,因为安装的 Python 将可供 Mac 的所有用户使用。

安装完成后,将显示“摘要”窗口。

../_images/mac_installer_06_summary.png

双击 /Applications/Python 3.13/ 窗口中的 Install Certificates.command 图标或文件以完成安装。

../_images/mac_installer_07_applications.png

这将打开一个临时的 终端 shell 窗口,该窗口将使用新的 Python 下载并安装其使用的 SSL 根证书。

../_images/mac_installer_08_install_certificates.png

如果 Successfully installed certifiupdate complete 出现在终端窗口中,则安装完成。关闭此终端窗口和安装程序窗口。

默认安装将包括

  • Applications文件夹中的一个Python 3.13 文件夹。在这里,您可以找到 IDLE,这是一个开发环境,它是官方 Python 发行版的标准组成部分;以及 Python Launcher,它处理从 macOS Finder 双击 Python 脚本。

  • 一个框架 /Library/Frameworks/Python.framework,其中包含 Python 可执行文件和库。安装程序将此位置添加到您的 shell 路径。要卸载 Python,您可以删除这三项内容。指向 Python 可执行文件的符号链接放置在 /usr/local/bin/ 中。

注意

最新版本的 macOS 在 /usr/bin/python3 中包含一个 python3 命令,该命令链接到由 Apple 开发工具 XcodeXcode 的命令行工具提供和使用的通常较旧且不完整的 Python 版本。您不应修改或尝试删除此安装,因为它由 Apple 控制并由 Apple 提供的或第三方软件使用。如果您选择从 python.org 安装较新的 Python 版本,您的计算机上将有两个不同但功能正常的 Python 安装,它们可以共存。默认安装程序选项应确保使用其 python3 而不是系统 python3

5.1.2. 如何运行 Python 脚本

有两种方法可以调用 Python 解释器。如果您熟悉在终端窗口中使用 Unix shell,则可以调用 python3.13python3,可以选择后跟一个或多个命令行选项(在命令行和环境中描述)。Python 教程中也有一个关于从 shell 交互式使用 Python的有用部分。

您还可以通过集成开发环境调用解释器。IDLE 是一个基本编辑器和解释器环境,它包含在 Python 的标准发行版中。IDLE 包括一个“帮助”菜单,允许您访问 Python 文档。如果您是 Python 的全新手,您可以在该文档中阅读教程简介。

还有许多其他可用的编辑器和 IDE,有关更多信息,请参阅编辑器和 IDE

要从终端窗口运行 Python 脚本文件,您可以使用脚本文件的名称调用解释器

python3.13 myscript.py

要从 Finder 运行脚本,您可以

  • 将其拖到 Python Launcher

  • 通过 Finder 信息窗口选择 Python Launcher 作为打开脚本(或任何 .py 脚本)的默认应用程序,然后双击它。Python Launcher 具有各种首选项来控制脚本的启动方式。按住 Option 键拖动允许您更改一次调用的这些设置,或者使用其 Preferences 菜单全局更改设置。

请注意,直接从 macOS Finder 运行脚本可能会产生与从终端窗口运行时不同的结果,因为脚本将不会在通常的 shell 环境中运行,包括在 shell 配置文件中设置的任何环境变量。并且,与任何其他脚本或程序一样,请务必确定您将要运行的内容。

5.2. 其他发行版

除了 macOS 安装程序的标准 python.org 之外,还有一些第三方 macOS 发行版,可能包含其他功能。一些流行的发行版及其主要功能包括:

ActivePython

具有多平台兼容性的安装程序,附带文档。

Anaconda

流行的科学模块(如 numpy、scipy 和 pandas)以及 conda 包管理器。

Homebrew

macOS 的包管理器,包括多个版本的 Python 和许多基于 Python 的第三方软件包(包括 numpy、scipy 和 pandas)。

MacPorts

另一个 macOS 的包管理器,包括多个版本的 Python 和许多基于 Python 的第三方软件包。可能包含适用于旧版本 macOS 的 Python 和许多软件包的预构建版本。

请注意,发行版可能不包含最新版本的 Python 或其他库,并且不由核心 Python 团队维护或支持。

5.3. 安装额外的 Python 包

有关更多信息,请参阅 Python 打包用户指南

5.4. GUI 编程

在 Mac 上使用 Python 构建 GUI 应用程序有多种选择。

标准的 Python GUI 工具包是 tkinter,它基于跨平台的 Tk 工具包 (https://www.tcl.tk)。安装程序中包含 macOS 原生版本的 Tk。

PyObjC 是一个 Python 绑定,用于 Apple 的 Objective-C/Cocoa 框架。有关 PyObjC 的信息,请访问 pyobjc

还有许多可用的替代 macOS GUI 工具包,包括

  • PySide: Qt GUI 工具包 的官方 Python 绑定。

  • PyQt: Qt 的替代 Python 绑定。

  • Kivy: 一个支持桌面和移动平台的跨平台 GUI 工具包。

  • Toga: BeeWare 项目 的一部分;支持桌面、移动、Web 和控制台应用程序。

  • wxPython: 一个支持桌面操作系统的跨平台工具包。

5.5. 高级主题

5.5.1. 安装自由线程二进制文件

3.13 版本新增: (实验性)

注意

本节中描述的所有内容均被视为实验性,预计在未来版本中会发生更改。

python.org macOS 版 Python 安装程序包可以选择性地安装一个额外的 Python 3.13 构建版本,该版本支持 PEP 703,即实验性的自由线程功能(在禁用 全局解释器锁 的情况下运行)。请查看 python.org 上的发布页面,以获取可能的更新信息。

由于此功能仍被视为实验性,因此默认情况下不安装对其的支持。它打包为单独的安装选项,可以通过单击安装程序 安装类型 步骤中的 自定义 按钮获得,如上所述。

../_images/mac_installer_09_custom_install_free_threaded.png

如果选中 自由线程 Python 包名称旁边的复选框,则还会在 /Library/Frameworks 中与常规的 Python.framework 一起安装一个单独的 PythonT.framework。此配置允许自由线程 Python 3.13 构建版本与传统的(仅限 GIL)Python 3.13 构建版本在您的系统上共存,同时最大限度地降低安装或测试时的风险。此安装布局本身也是实验性的,可能会在未来的版本中发生更改。

已知注意事项和限制

  • 默认情况下选中的 UNIX 命令行工具 包将在 /usr/local/bin 中为自由线程解释器 python3.13t 和配置实用程序 python3.13t-config 安装链接,该实用程序可能对包构建器有用。由于 /usr/local/bin 通常包含在您的 shell PATH 中,因此在大多数情况下,无需更改 PATH 环境变量即可使用 python3.13t

  • 对于此版本,Shell 配置文件更新程序 包和 /Applications/Python 3.13/ 中的 Update Shell Profile.command 不支持自由线程包。

  • 自由线程构建版本和传统构建版本具有单独的搜索路径和单独的 site-packages 目录,因此默认情况下,如果需要在两个构建版本中都使用一个包,则可能需要在两个构建版本中都安装它。自由线程包将安装 pip 的单独实例,以用于 python3.13t

    • 要使用 pip 安装软件包而不使用 venv

      python3.13t -m pip install <package_name>

  • 当使用多个 Python 环境时,创建并使用虚拟环境通常是最安全和最简单的。这可以避免可能的命令名称冲突以及关于正在使用哪个 Python 的混淆。

    python3.13t -m venv <venv_name>

    然后 激活

  • 要运行自由线程版本的 IDLE

    python3.13t -m idlelib

  • 两个构建版本中的解释器都响应相同的 PYTHON 环境变量,这可能会导致意外的结果,例如,如果您在 shell 配置文件中设置了 PYTHONPATH。如有必要,可以使用 命令行选项,例如 -E 来忽略这些环境变量。

  • 自由线程构建版本链接到传统框架中安装的第三方共享库,例如 OpenSSLTk。这意味着两个构建版本也共享由 Install Certificates.command 脚本安装的一组信任证书,因此只需运行一次即可。

  • 如果您不能依赖 /usr/local/bin 中的链接指向 python.org 自由线程的 python3.13t (例如,如果您想在那里安装自己的版本或某些其他发行版),您可以显式设置 shell PATH 环境变量以包含 PythonT 框架的 bin 目录。

    export PATH="/Library/Frameworks/PythonT.framework/Versions/3.13/bin":"$PATH"
    

    默认情况下,传统的框架安装也会执行类似的操作,但针对 Python.framework。请注意,如果两个框架的 bin 目录都在 PATH 中,则可能会导致混淆,如果两个目录中都存在 python3.13 等重复名称;实际使用哪个取决于它们在 PATH 中出现的顺序。which python3.xwhich python3.xt 命令可以显示正在使用的路径。使用虚拟环境可以帮助避免此类歧义。另一种选择可能是为所需的解释器创建一个 shell 别名,例如

    alias py3.13="/Library/Frameworks/Python.framework/Versions/3.13/bin/python3.13"
    alias py3.13t="/Library/Frameworks/PythonT.framework/Versions/3.13/bin/python3.13t"
    

5.5.2. 使用命令行安装

如果您想使用自动化来安装 python.org 安装程序包(而不是使用熟悉的 macOS Installer GUI 应用程序),macOS 命令行 installer 实用程序也允许您选择非默认选项。如果您不熟悉 installer,它可能会有些神秘(有关更多信息,请参阅 man installer)。例如,以下 shell 代码片段显示了一种方法,使用 3.13.0b2 版本并选择自由线程解释器选项

RELEASE="python-3.13.0b2-macos11.pkg"

# download installer pkg
curl -O https://pythonlang.cn/ftp/python/3.13.0/${RELEASE}

# create installer choicechanges to customize the install:
#    enable the PythonTFramework-3.13 package
#    while accepting the other defaults (install all other packages)
cat > ./choicechanges.plist <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
        <dict>
                <key>attributeSetting</key>
                <integer>1</integer>
                <key>choiceAttribute</key>
                <string>selected</string>
                <key>choiceIdentifier</key>
                <string>org.python.Python.PythonTFramework-3.13</string>
        </dict>
</array>
</plist>
EOF

sudo installer -pkg ./${RELEASE} -applyChoiceChangesXML ./choicechanges.plist -target /

然后,您可以使用如下代码测试两个安装程序构建版本是否都可用

$ # test that the free-threaded interpreter was installed if the Unix Command Tools package was enabled
$ /usr/local/bin/python3.13t -VV
Python 3.13.0b2 experimental free-threading build (v3.13.0b2:3a83b172af, Jun  5 2024, 12:57:31) [Clang 15.0.0 (clang-1500.3.9.4)]
$ #    and the traditional interpreter
$ /usr/local/bin/python3.13 -VV
Python 3.13.0b2 (v3.13.0b2:3a83b172af, Jun  5 2024, 12:50:24) [Clang 15.0.0 (clang-1500.3.9.4)]
$ # test that they are also available without the prefix if /usr/local/bin is on $PATH
$ python3.13t -VV
Python 3.13.0b2 experimental free-threading build (v3.13.0b2:3a83b172af, Jun  5 2024, 12:57:31) [Clang 15.0.0 (clang-1500.3.9.4)]
$ python3.13 -VV
Python 3.13.0b2 (v3.13.0b2:3a83b172af, Jun  5 2024, 12:50:24) [Clang 15.0.0 (clang-1500.3.9.4)]

注意

当前的 python.org 安装程序仅安装到固定位置,例如 /Library/Frameworks//Applications/usr/local/bin。您不能使用 installer -domain 选项安装到其他位置。

5.5.3. 分发 Python 应用程序

存在一系列工具,用于将您的 Python 代码转换为独立的、可分发的应用程序

  • py2app: 支持从 Python 项目创建 macOS .app 包。

  • Briefcase:是 BeeWare 项目的一部分;一个跨平台打包工具,支持在 macOS 上创建 .app 包,以及管理签名和公证。

  • PyInstaller:一个跨平台打包工具,可创建一个单独的文件或文件夹作为可分发的工件。

5.5.4. App Store 合规性

通过 macOS App Store 提交分发的应用程序必须通过 Apple 的应用程序审核流程。此流程包括一组自动验证规则,用于检查提交的应用程序包是否存在问题代码。

Python 标准库包含一些已知会违反这些自动规则的代码。虽然这些违规行为似乎是误报,但 Apple 的审核规则无法被质疑。因此,必须修改 Python 标准库,应用程序才能通过 App Store 审核。

Python 源代码树包含一个补丁文件,它将删除所有已知会导致 App Store 审核流程出现问题的代码。当 CPython 配置了 --with-app-store-compliance 选项时,此补丁会自动应用。

通常情况下,在 Mac 上使用 CPython 不需要此补丁;如果您在 macOS App Store 之外分发应用程序,也不需要此补丁。只有当您使用 macOS App Store 作为分发渠道时,才需要此补丁。

5.6. 其他资源

python.org 帮助页面提供了许多有用的资源的链接。Pythonmac-SIG 邮件列表是另一个专门为 Mac 上的 Python 用户和开发人员提供的支持资源。