5. 在 Mac 上使用 Python
***********************

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

运行 macOS 的 Mac 上的 Python 在原则上与其他 Unix 平台上的 Python 非常
相似，但有一些额外的特性 如集成开发环境（IDE）和包管理器值得指出。


5.1. 获取和安装 Python
======================

macOS 曾经在 10.8 至 12.3 版中预装了 Python 2.7。 建议你从 Python 网站
安装最新版本的 Python 3。 那里也提供了当前的 Python "universal2
binary" 编译版，它可以在 Mac 的新式 Apple Silicon 和旧式 Intel 处理器
上原生运行。

你安装后得到的东西有：

* 你的 "Applications" 文件夹中会有一个 "Python 3.13" 文件夹。 你将在这
  里找到 IDLE，它是作为官方 Python 发行版标准组成部分的开发环境；以及
  **Python Launcher**，它负责处理在 Finder 中双击 Python 脚本的操作。

* 一个框架 "/Library/Frameworks/Python.framework"，它包括 Python 可执
  行文件和库。 安装程序将此位置添加到 shell 路径。 要卸载 Python，你可
  以移除这三个项目。 将有一个 Python 可执行文件的符号链接放在
  "/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 运行时使用 Help 菜单。

如果你想从 Terminal 窗口命令行或 Finder 中运行 Python 脚本那么你首先需
要用一个编辑器来创建你的脚本。 macOS 自带了多个标准的 Unix 命令行编辑
器，其中包括 **vim** **nano**。 如果你想要一个更具 Mac 风格的编辑器，
那么来自 Bare Bones Software 的 **BBEdit** (参见
https://www.barebones.com/products/bbedit/index.html) 是一个很好的选择
，还有 **TextMate** (参见 https://macromates.com)。 其他的编辑器包括
**MacVim** (https://macvim.org) 和 **Aquamacs** (https://aquamacs.org)
。

要从终端窗口运行脚本，必须确保:file:*/usr/local/bin* 位于 shell 搜索路
径中。

要从 Finder 运行你的脚本，你有两个选择：

* 将其拖拽到 **Python Launcher**。

* 选择 **Python Launcher** 作为通过 finder Info 窗口打开脚本（或任何
  ".py" 脚本）和双击它时的默认应用程序。 **Python Launcher** 有各种首
  选项来控制脚本的启动方式。 选项拖拽允许你为单次发起调用更改这些首选
  项，或使用其 Preferences 菜单进行全局性的更改。


5.1.2. 运行有图形界面的脚本
---------------------------

对于旧版本的 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 的 Technical Q&A QA1067
。

有关安装 Python 包的更多信息，请参阅 安装额外的 Python 包 一节。


5.2. IDE
========

Python 附带了标准的 IDLE 开发环境。 可以在
https://www.hashcollision.org/hkn/python/idle_intro/index.html 找到一
篇有关使用 IDLE 的介绍。


5.3. 安装额外的 Python 包
=========================

本小节已移至 Python Packaging User Guide。


5.4. GUI 编程
=============

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

*PyObjC* 是一个针对 Apple 的 Objective-C/Cocoa 框架的 Python 绑定，该
框架是大多数现代 Mac 开发的基础。 有关 PyObjC 的信息可在 pyobjc 查看。

标准的 Python GUI 工具包是 "tkinter"，基于跨平台的 Tk 工具包（
https://www.tcl.tk）。 Apple 的 macOS 捆绑了 Aqua 原生版本的 Tk，其最
新版本可以从 https://www.activestate.com 下载和安装；它也可以从源代码
构建。

有许多其他 macOS 的 GUI 工具包可供选择：

* PySide: Official Python bindings to the Qt GUI toolkit.

* PyQt: Qt 的替代性 Python 绑定包。

* Kivy: 一款支持桌面和移动设备的跨平台 GUI 工具包。

* Toga: BeeWare 项目 的一部分；支持桌面、移动设备、Web 和控制台应用。

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


5.5. 分发 Python 应用程序
=========================

有一系列工具可将你的 Python 代码转换为独立发布的应用程序：

* py2app: 支持基于 Python 项目创建 macOS ".app" 软件包。

* Briefcase: BeeWare 项目 的一部分；一款支持在 macOS 上创建 ".app" 软
  件包，并能管理签名和公证的跨平台打包工具。

* PyInstaller: 一款通过创建单独文件或目录作为可发布形式的跨平台打包工
  具。


5.5.1. App Store 合规性
-----------------------

在 macOS App Store 中提交发布的 app 必须通过 Apple 的 app 审核进程。
此进程包括一组在所提交的应用程序包中自动检查有问题代码的验证规则。

Python 标准库包含了一些已知会违反这些自动规则的代码。 虽然这些违规情况
看来是属于误报，但 Apple 的审核规则是不可挑战的。 因此，有必要修改
Python 标准库以便 app 能够通过 App Store 的审核。

Python 源代码树包含 一个补丁文件 可移除所有已知的会导致 App Store 审核
过程出现问题的代码。 这个补丁会在 CPython 配置了 "--with-app-store-
compliance" 选项时自动应用。

这个补丁对于在 Mac 上使用 CPython 并不是必需的；如果你是在 macOS App
Store *以外* 的地方发布 app 它也不是必需的。 它 *只有* 在你使用 macOS
App Store 作为发布渠道时才是必需的。


5.6. 其他资源
=============

Pythonmac-SIG 邮件列表是 Mac 上 Python 用户和开发人员的优秀支持资源：

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

另一个有用的资源是 MacPython wiki ：

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