我沒錢買 MacBook - 自動化多平台 Python 應用打包
不如虎穴,焉得虎子,說明了 pyinstaller 要打包 macOS 的執行檔一定要在 macOS 環境運行。
為了支援多平台的 Python 應用打包(例如 Windows、macOS 和 Linux),我們可以使用 GitHub Actions 和 PyInstaller 配合使用。以下是一步步的詳細指南,介紹如何在 GitHub Actions 中設置自動化打包,生成適用於不同作業系統的可執行文件。
背景
講好久 Node.js 了,今天來點 Python 的東西。PyInstaller 是一個用於將 Python 應用程序打包為獨立可執行文件的工具。它支持 Windows、macOS 和 Linux,並且可以將 Python 程序轉換為可執行文件 (像是 .exe),讓使用者無需安裝 Python 解釋器也可以直接執行。
使用起來大概像這樣:
1# 安裝 PyInstaller
2pip install pyinstaller
3# 打包成單一可執行文件
4pyinstaller --onefile hello.py
一般情況下,我們需要在不同的操作系統上運行 PyInstaller 來生成對應的可執行文件。比如說 Windows 的 .exe 文件不能在 macOS 上生成。而且如果直接像上面這樣打包檔案會很大,所以大家通常會安裝虛擬環境,然後在虛擬環境中執行 PyInstaller 來打包 Python 應用。
這樣就需要在不同的環境中進行打包,並且需要手動處理和分發生成的可執行文件實在有夠麻煩,你還要為了打包的程式多買一台筆電。為了提高效率,我們可以使用 GitHub Actions 來自動化這個過程,並在不同的操作系統上自動打包 Python 應用。
今日範例程式:https://github.com/Edit-Mr/2024-GitHub-Actions/tree/main/21
準備工作
首先,請先準備一份你的 Python 文件。如果你還沒有,可以使用以下的範例代碼,這是一台簡單的計算機。
1def calculator():
2 print("Python 計算機")
3
4 while True:
5 formula = input("請輸入運算式 (輸入 'exit' 離開): ")
6
7 if formula.lower() == 'exit':
8 print("再見!")
9 break
10 try:
11 result = eval(formula)
12 print(f"結果:{result}")
13 except Exception as e:
14 print(f"錯誤:{e}")
15
16if __name__ == "__main__":
17 calculator()
跑起來效果大概像這樣:
1Python 計算機
2請輸入運算式 (輸入 'exit' 離開): 1+2*3
3結果: 7
設置 GitHub Actions
我們需要配置 GitHub Actions 來在不同的操作系統上運行 PyInstaller。以下是一個例子,展示了如何在 macOS、Windows 和 Linux 上自動化打包過程。
在你的 GitHub repository 中,創建一個新的工作流程文件。例如,在 .github/workflows
目錄下創建一個名為 build-multi-platform.yml
的文件,並添加以下內容:
1name: Build Multi-Platform
2
3on:
4 push:
5 branches:
6 - main
7 workflow_dispatch:
8
9jobs:
10 build:
11 strategy:
12 matrix:
13 os: [ubuntu-latest, macos-latest, windows-latest]
14 python-version: [3.11]
15
16 runs-on: ${{ matrix.os }}
17
18 steps:
19 - name: Checkout repository
20 uses: actions/checkout@v3
21
22 - name: Set up Python
23 uses: actions/setup-python@v3
24 with:
25 python-version: ${{ matrix.python-version }}
26
27 - name: Install dependencies
28 run: |
29 pip install pyinstaller
30
31 - name: Build application
32 run: |
33 pyinstaller --onefile hello.py
34
35 - name: Archive artifacts
36 uses: actions/upload-artifact@v3
37 with:
38 name: hello-executable-${{ matrix.os }}
39 path: dist/hello${{ matrix.os == 'windows-latest' && '.exe' || '' }}
詳細步驟解析
- Checkout repository: 檢出 GitHub repository 的代碼。
- Set up Python: 安裝指定版本的 Python。
- Install dependencies: 安裝 PyInstaller。
- Build application: 使用 PyInstaller 打包 Python 應用,根據運行的操作系統環境變數來確定可執行文件的名稱和擴展名。
- Archive artifacts: 上傳生成的可執行文件作為 GitHub Actions 的構建產物,供後續下載或分發使用。
測試和驗證
推送更改到 GitHub repository,然後檢查 GitHub Actions 頁面來確保工作流程成功運行。檢查生成的可執行文件是否能在對應的操作系統上正常運行。
小結
通過這篇教程,我們學會了如何在 GitHub Actions 中設置多平台的自動打包流程。這樣,我們可以在不同的操作系統上生成對應的可執行文件,並自動化打包和分發過程,提高了開發效率和應用的可用性。如果有任何問題或需要進一步的幫助,隨時告訴我!