使用 py2app 製作 MacOS app
py2app 是專門用來將 Python 檔案製作為 MacOS app 的第三方函式庫 ( 打包為 MacOS app ),這篇教學會介紹如何安裝 py2app,以及實作透過 py2app 將 Python 製作成 MacOS 作業系統可以執行的應用程式。
快速導覽:
因為 Google Colab 無法製作應用程式,所以請使用本機環境 ( 參考:使用 Python 虛擬環境 ) 或使用 Anaconda Jupyter 進行實作 ( 參考:使用 Anaconda )。
使用虛擬環境
使用 py2app 製作 MacOS 應用程式時,會將所有安裝的函式庫一併打包,因此請使用虛擬環境,控制打包的內容只有「使用到的函式庫」,避免產生的應用程式過於龐大且可能會有互相干擾的狀況,使用虛擬環境請參考下面兩篇文章:
- Anaconda Jupyter:建立虛擬環境 ( 針對 Anaconda Jupyter )
- Python 本機環境:使用 Python 虛擬環境
進入虛擬環境後,建議使用下方指令將 pip 升級到最新版,避免產生的 app 因為 pip 版本不同而無法執行的狀況。
pip install --upgrade pip
安裝所需的函式庫
升級 pip 之後,安裝要打包的 Python 檔案裡所有需要用到的函式庫,以本篇教學的範例而言,需要安裝 PyQt5 函式庫 ( 在虛擬環境底下 )。
pip install PyQt5
安裝後,建立一個 Python 檔案 ( 範例為 test.py ),程式碼內容如下 ( 單純執行後會開啟一個視窗界面,內容包含兩顆按鈕,點擊不同按鈕時會切換文字 ):
from PyQt5 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
def show(e):
label.setText(e)
label = QtWidgets.QLabel(Form)
label.setText('A')
label.setStyleSheet('font-size:20px;')
label.setGeometry(50,30,100,30)
btn1 = QtWidgets.QPushButton(Form)
btn1.setText('A')
btn1.setGeometry(50,60,50,30)
btn1.clicked.connect(lambda:show('A'))
btn2 = QtWidgets.QPushButton(Form)
btn2.setText('B')
btn2.setGeometry(110,60,50,30)
btn2.clicked.connect(lambda:show('B'))
Form.show()
sys.exit(app.exec_())
安裝 py2app 函式庫
輸入下列指令,安裝 py2app 函式庫 ( 在虛擬環境底下 )。
pip install py2app
建立設定檔
輸入下列指令,執行後就會建立生成 app 執行檔的設定檔 setup.py。
py2applet --make-setup test.py
製作 MacOS app
輸入下列指令,執行後就根據設定檔,產生 MacOS 應用程式。
python setup.py py2app
打包過程完成後 ( 最後出現 done 文字 ),會產生 build 和 dist 兩個資料夾,build 資料夾內容為打包過程中所需要的檔案,dist 資料夾內容就是最後產生的 MacOS 應用程式。
進入 dist 資料夾,就可以執行應用程式 ( 注意,不同版本的 MacOS 產生的應用程式可能無法互相使用! )
執行應用程式就會看到出現兩顆按鈕互相切換的畫面,由於現在電腦作業系統可以設定深色模式,如果沒有設定樣式,則預設樣式會隨著作業系統而改變。
小結
透過 py2app 就可以透過 Python 開發桌面的應用程式,但由於作業系統彼此可能不相容的問題,建議如果透過這種方式開發應用程式,還是要在不同的作業系統進行測試,或透過不同的作業系統開發對應的版本。
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~