5. 在 Mac 系統使用 Python
*************************

作者:
   Bob Savage <bobsavage@mac.com>

Python 在 Mac 的 macOS 上執行和在其他 Unix 平台上執行的原理非常相似，
但值得一提的是在 macOS 上有其他額外的功能，例如整合開發環境 (IDE) 與套
件管理。


5.1. 取得和安裝 Python
======================

macOS 自 10.8 版本開始至 12.3 版本之間預設安裝 Python 2.7。你也可以到
Python 網站安裝最新的 Python 3 版本。你可以找到建立在"通用二進位
(universal2 binary)" 上的 Python 建置版本，它能夠原生地運行在 Mac 新的
Apple Silicon CPU 與過去的 Intel CPU 上。

在安裝後你必須要做幾件事：

* 會有一個 "Python 3.13" 資料夾在你的 "Applications" 資料夾中。在這裡
  你可以找到 IDLE，它是作為官方 Python 發行版標準組成的開發環境；以及
  **Python Launcher**，它負責處理在 Finder 中雙擊 Python 腳本的操作。

* "/Library/Frameworks/Python.framework" 框架，包括 Python 可執行檔案
  (executable) 和函式庫 (library)。安裝程式將此位置新增到 shell 路徑。
  要解除安裝 Python ，你可以移除這三個專案。Python 可執行檔案的符號連
  結 (symlink) 則放在 "/usr/local/bin/" 中。

備註:

  在 macOS 10.8-12.3，Apple 提供的 Python 建置版本分別安裝在
  "/System/Library/Frameworks/Python.framework" 和 "/usr/bin/python"
  中。你不應該去修改或刪除這些內容，因為它們由 Apple 控制並且被 Apple
  或第三方軟體使用。請記住，如果你選擇從 python.org 安裝較新的 Python
  版本，那麼你的計算機上將安裝兩個不同但都可運作的 Python，因此你的路
  徑和用法與你想要執行的操作一致非常重要。

IDLE 包含一個幫助 (Help) 選單，讓你可以參閱 Python 文件。如果你是
Python 的新手，你應該開始閱讀該文件中的教學介紹。

如果你熟悉其他 Unix 平臺上的 Python，那麼你應該閱讀有關從 Unix shell
執行 Python 腳本的部分。


5.1.1. 如何執行 Python 腳本
---------------------------

在 macOS 上開始使用 Python 的最佳方法是透過 IDLE 整合開發環境；參見 整
合化開發工具 (IDE) 部分，並在 IDE 執行時使用幫助選單。

如果要從終端機視窗命令列或 Finder 執行 Python 腳本，首先需要一個編輯器
來建立腳本。macOS 附帶了許多標準的 Unix 命令列編輯器，如 **vim** 和
**nano**。如果你想要一個更 Mac 化的編輯器，那麼來自 Bare Bones
Software 的 **BBEdit**（參見
http://www.barebones.com/products/bbedit/index.html） 是不錯的選擇，
**TextMate** （參見 https://macromates.com/）也是個選擇。其他編輯器包
括 **MacVim** (https://macvim.org) 和 **Aquamacs**
(https://aquamacs.org/)。

要從終端機視窗執行腳本，你必須確保 "/usr/local/bin" 位於 shell 搜尋路
徑中。

從 Finder 執行你的腳本時，你有兩個選項：

* 把它拖曳到 **Python Launcher**

* 透過 finder Info 視窗選擇 **Python Launcher** 作為開啟腳本（或任何
  ".py" 腳本）的預設應用程式，然後雙擊腳本。**Python Launcher** 有各種
  用來控制腳本啟動方式的選項。拖曳選項可以讓你一次更改多個選項，或使用
  其偏好設定選單以全域性地更改內容。


5.1.2. 透過 GUI 執行腳本
------------------------

對於舊版本的 Python，你需要注意一個 macOS 的怪異之處：與 Aqua 視窗管理
器溝通的程式（換而言之，任何具有 GUI（圖形化使用者介面）的程式）需要以
特殊方式執行。使用 **pythonw** 而不是 **python** 來啟動這樣的腳本。

Python 3.9 上，你可以使用 **python** 或者 **pythonw**。


5.1.3. 設定
-----------

macOS 上的 Python 遵循所有標準的 Unix 環境變數，例如 "PYTHONPATH"，但
是為 Finder 啟動的程式設定這些變數並非是標準做法，因為 Finder 在啟動時
不會讀取你的 ".profile" 或 ".cshrc"。你需要建立一個檔案
"~/.MacOSX/environment.plist"。相關資訊請參閱 Apple 的技術問答集
QA1067。

更多關於安裝 Python 套件的資訊，參閱 安裝額外的 Python 套件 部分。


5.2. 整合化開發工具 (IDE)
=========================

Python 附帶標準的 IDLE 開發環境。有關使用 IDLE 的詳細介紹，請見
https://www.hashcollision.org/hkn/python/idle_intro/index.html。


5.3. 安裝額外的 Python 套件
===========================

這個章節已經被移動到 Python Packaging User Guide。


5.4. 開發 GUI 程式
==================

於 Mac 上使用 Python 來建立 GUI 應用程式有許多選項。

*PyObjC* 是一個 Apple Objective-C/Cocoa 框架的 Python 繫結 (binding)，
這是大多數現代 Mac 開發的基礎。有關 PyObjC 的資訊，請見 pyobjc。

標準的 Python GUI 工具套件是 "tkinter"，基於跨平臺的 Tk 工具套件
(https://www.tcl.tk)。Apple 的 macOS 包含了 Aqua 原生版本的 Tk，最新版
本可以從 https://www.activestate.com 下載和安裝；它也可以從原始碼開始
建置。

有許多替代 macOS GUI 工具套件可用：

* PySide：Qt GUI 工具包的官方 Python 繫結。

* PyQt：Qt 的替代 Python 繫結。

* Kivy：一個支援桌面和行動平臺的跨平臺 GUI 工具包。

* Toga：BeeWare 專案的一部分；支援桌面、行動、網頁和控制台應用程式。

* wxPython：一個支援桌面作業系統的跨平臺工具包。


5.5. 發行 Python 應用程式
=========================

A range of tools exist for converting your Python code into a
standalone distributable application:

* py2app：支援從 Python 專案打包成 macOS ".app"。

* Briefcase: Part of the BeeWare Project; a cross-platform packaging
  tool that supports creation of ".app" bundles on macOS, as well as
  managing signing and notarization.

* PyInstaller：一個跨平臺打包工具，可以將單一檔案或資料夾打包成可分發
  的檔案。


5.5.1. App Store Compliance
---------------------------

Apps submitted for distribution through the macOS App Store must pass
Apple's app review process. This process includes a set of automated
validation rules that inspect the submitted application bundle for
problematic code.

The Python standard library contains some code that is known to
violate these automated rules. While these violations appear to be
false positives, Apple's review rules cannot be challenged. Therefore,
it is necessary to modify the Python standard library for an app to
pass App Store review.

The Python source tree contains a patch file that will remove all code
that is known to cause issues with the App Store review process. This
patch is applied automatically when CPython is configured with the "--
with-app-store-compliance" option.

This patch is not normally required to use CPython on a Mac; nor is it
required if you are distributing an app *outside* the macOS App Store.
It is *only* required if you are using the macOS App Store as a
distribution channel.


5.6. 其他資源
=============

Pythonmac-SIG 郵件清單對於 Mac 上的 Python 使用者和開發者是一個極佳的
支援資源：

https://www.python.org/community/sigs/current/pythonmac-sig/

另一個好用資源是 MacPython wiki：

https://wiki.python.org/moin/MacPython
