主要观点:
- 构建 Python 时可通过
./configure
传递各种选项改变构建方式,有相关文档,但其中一个仅在 macOS 上重要且效果常被误解。 - macOS 上 GUI 应用为 bundle,包含特定布局和元数据,framework 也是 bundle 包含库,Python 的 framework 构建会附带 stub 应用 bundle,使 Python 进程处于正常应用执行环境,能让各种平台 API 正常工作。
- 关于 Python 中 framework 的需求不明确,不同东西可能在非 framework 环境中失败,framework 构建包含 macOS 平台期望的部分,但具体哪些需哪些不需随时间变化,且 stub 可能不够。
- 以
/etc/
构建为例说明 framework 与非 framework 构建的类似情况,就像删除/etc
可能导致一些未知问题,framework 构建就包含平台期望的所有部分。 - 大多数用户应使用 framework 构建以保证更多东西能正常工作,非 framework 构建在特定情况下有其优势,如开发只在 Linux 运行的 web 应用等。
- 作者认为 framework 构建应为默认,应让用户能轻松调用平台 API 处理数据,应关注在所有平台上赋予用户本地计算和平台访问的能力。
关键信息:
./configure
选项及文档链接:https://docs.python.org/3.12/...- macOS 上 GUI 应用与 framework 的特点
- Python framework 构建的 stub 应用 bundle 作用
/etc/
构建的类比- framework 与非 framework 构建的适用场景
重要细节:
- 非 framework 构建可能因未包含某些依赖而导致 IDLE 等 GUI 库无法启动,但其他 GUI 库可能正常。
- Python 不自带 macOS“cocoa”API 包装器,但可通过 pyobjc 进行询问。
- Framework 构建通常较大、更难迁移,可能对管理大量 Python 版本不便。
- 作者感谢赞助者并提供咨询工作联系方式。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。