5. 在macOS上使用Python

本文旨在概述在Mac电脑上开始使用Python时应了解的macOS特定行为。在运行macOS的Mac上使用Python与在其他基于Unix的平台上使用Python非常相似,但在安装和某些功能方面存在一些差异。

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

5.1. 使用来自python.org的macOS版Python

5.1.1. 安装步骤

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

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

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

../_images/mac_installer_01_introduction.png

点击 继续 按钮会弹出此安装程序的 自述文件。除了其他重要信息外,自述文件 还会说明将要安装的Python版本以及它支持的macOS版本。您可能需要滚动阅读整个文件。默认情况下,此 自述文件 也将安装在 /Applications/Python 3.14/ 中,并随时可读。

../_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

无论哪种情况,点击 安装 都将通过请求安装新软件的权限来开始安装过程。由于安装的Python将对Mac的所有用户可用,因此需要具有Administrator权限的macOS用户名。

安装完成后,将出现 摘要 窗口。

../_images/mac_installer_06_summary.png

双击/Applications/Python 3.14/窗口中的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.14文件夹。在这里您可以找到IDLE,它是官方Python发行版标准组成部分的开发环境;以及Python Launcher,它处理从macOS Finder双击Python脚本。

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

备注

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

5.1.2. 如何运行Python脚本

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

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

还有许多其他编辑器和IDE可用,请参阅编辑器和IDE以获取更多信息。

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

python3.14 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)。安装程序中包含 Tk 的 macOS 原生版本。

PyObjC 是 Python 对 Apple Objective-C/Cocoa 框架的绑定。有关 PyObjC 的信息可从 pyobjc 获取。

还有一些其他 macOS GUI 工具包可供选择,包括

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

  • PyQt: Qt 的替代 Python 绑定。

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

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

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

5.5. 高级主题

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

在 3.13 版本加入。

python.org Python for macOS 安装程序包可选择安装 Python 3.14 的附加构建,该构建支持 PEP 703,即自由线程功能(运行禁用 全局解释器锁)。请查看 python.org 上的发布页面,以获取可能更新的信息。

自由线程模式正在运行并持续改进,但与常规构建相比,单线程工作负载有一些额外的开销。此外,第三方包,特别是带有扩展模块的包,可能尚未准备好在自由线程构建中使用,并且会重新启用GIL。因此,默认情况下不安装对自由线程的支持。它作为单独的安装选项打包,可以通过点击安装程序的 安装类型 步骤中的 自定义 按钮(如上所述)来获得。

../_images/mac_installer_09_custom_install_free_threaded.png

如果 Free-threaded Python 软件包名称旁边的复选框被勾选,一个单独的 PythonT.framework 也将与正常的 Python.framework 一起安装在 /Library/Frameworks 中。此配置允许自由线程 Python 3.14 构建与传统的(仅限 GIL)Python 3.14 构建在您的系统上共存,同时在安装或测试时风险最小。此安装布局可能会在未来的版本中发生变化。

已知注意事项和限制

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

  • 在此版本中,Shell 配置文件更新器 软件包和 /Applications/Python 3.14/ 中的 Update Shell Profile.command 不支持自由线程软件包。

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

    • 在没有venv的情况下使用pip安装包

      python3.14t -m pip install <package_name>
  • 在使用多个 Python 环境时,通常最安全、最简单的方法是创建和使用虚拟环境。这可以避免可能的命令名称冲突和关于正在使用哪个 Python 的混淆

    python3.14t -m venv <venv_name>

    然后激活

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

    python3.14t -m idlelib
  • 两种构建中的解释器都响应相同的PYTHON 环境变量,这可能会产生意想不到的结果,例如,如果您在 shell 配置文件中设置了PYTHONPATH。如有必要,可以使用命令行选项,如-E来忽略这些环境变量。

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

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

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

    传统的框架安装默认情况下做类似的事情,除了Python.framework。请注意,如果两个框架bin目录都在PATH中,并且存在像python3.14这样的重复名称,可能会导致混淆;实际使用哪一个取决于它们在PATH中出现的顺序。which python3.xwhich python3.xt命令可以显示正在使用哪个路径。使用虚拟环境可以帮助避免这种歧义。另一个选项可能是为所需的解释器创建一个shellalias,例如

    alias py3.14="/Library/Frameworks/Python.framework/Versions/3.14/bin/python3.14"
    alias py3.14t="/Library/Frameworks/PythonT.framework/Versions/3.14/bin/python3.14t"

5.5.2. 使用命令行安装

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

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

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

# create installer choicechanges to customize the install:
#    enable the PythonTFramework-3.14 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.14</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.14t -VV
Python 3.14.0b2 free-threading build (v3.14.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.14 -VV
Python 3.14.0b2 (v3.14.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.14t -VV
Python 3.14.0b2 free-threading build (v3.14.0b2:3a83b172af, Jun  5 2024, 12:57:31) [Clang 15.0.0 (clang-1500.3.9.4)]
$ python3.14 -VV
Python 3.14.0b2 (v3.14.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 用户和开发者提供的支持资源。