用Python和py2app寫獨立的Mac OS X 應用

發表於2016-01-05

在翻譯之前,譯者已根據原文成功建立了一個應用(Mac OS X 10.11.1, Python3.5),如讀者在操作中遇到問題,可在本文下方留言,共同探討。

原始碼下載:SandwichAPP


本教程中,我們將會使用 Python2 或 Python3 的Tkinter介面,結合py2app建立一個獨立的 OSX 應用。

“py2app 是一個讓你可以通過 Python 指令碼建立獨立應用包或外掛的 Python 安裝包命令。py2app 的設計與目的與 Windows 的 py2exe相似。”

與 py2app 相關的連結:

本指南沒有嚴格基於官方教程。我們基於一個 Sandwich.py 的 Python 檔案建立了一個名為 Sandwich.app 的應用。

app_finder.png

前提

建立一個普通資料夾,並建立一個virtualenv環境:

現在,建立一個簡單的Tkinter應用,並其命名為 Sandwich.py

這個小應用是這個樣子:

app_screen.png

安裝 py2app

原版的 py2app 由於 ModuleGraph 更新了版本產生了一個 bug。我 fork 了該工程,解決了 bug,然後放到了 Github。使用 pip 安裝 py2app:

建立 setup.py 檔案

py2app 包含了 py2applet 工具, 此工具可以幫你建立 setup.py 檔案:

setup.py 檔案是對應用的基本定義:

如果你的應用使用的其他檔案,比如 JSON 檔案,文字檔案,圖片等,你應該將他們包含在 DATA_FILES 中。 例如:

建立開發版和測試版的應用

py2app 基於在 setup.py 檔案的定義建立獨立應用。

為了方法測試和開發,py2app 提供了“別名模式”,該模式通過與開發檔案象徵性的連結構建應用。

此命令建立瞭如下檔案和資料夾:

這並不是一個獨立的應用,並且通過別名模式構建的應用不適用於其他機器。

別名模式下構建的應用直接引用了原始碼檔案,所以任何對 Sandwich.py 檔案作的修改在應用下次啟動時會立刻生效。

位於 dist/Sandwich.app 的開發應用可以和其他 .app 應用一樣,在 Finder 中或通過 open 命令($ open dist/Sandwich.app)啟動。你可以在終端執行如下命令啟動你的應用:

構建釋出版應用

當測試通過後,你可以通過呼叫 python setup.py py2app 來生成釋出版。確保舊的 builddist 檔案類都被刪除了:

此命令會將你的應用打包為 dist/Sandwich.app。由於該應用是自包含的,在任意時刻,如果你修改了程式碼,資料檔案,選項等,你都可以再次執行 py2app 命令重新構建。

原版的 py2app 有一個 bug,會出現 “AttributeError: 'ModuleGraph' object has no attribute 'scan_code'” 或者 load_module。如果你遇到此錯誤,請參考 StackOverflow 或者使用我的 py2app fork

此時此刻,最簡單的打包併發布應用的方法是在 Finder 中右擊該應用選擇“建立歸檔”。

新增一個圖示:

OPTIONS 字典中新增 "iconfile": "youricon.icns" 即可:

你可以在網上找到 icns 格式的圖示(例如:IconFinder或者freepik)。

應用高階設定

你可以通過修改 Info.plist 來呼叫應用的資訊各行為。最完整的對可用的鍵的引用是Apple’s Runtime Configuratin Guidelines

下面是一個有更多修改的例子:

通過設定,應用會擁有下面的資訊:

get_info.png

參考連結

其他連結

相關文章