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://python.club.tw/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 使用者和開發人員提供的支援資源。