iT邦幫忙

4

Python 生成 Windows 執行檔教學 (Pyinstaller, PowerShell)

壹、前言

將 python 程式封裝,使用者將更便於使用,而不需擔心設定 python 環境
macOS 還好說,系統有附帶 python,但 windows 系統下要執行就麻煩了
最近剛好有需求,故對此研究,不料踩到微軟精心準備的陷阱,浪費不少時間
因此寫下此筆記作為奮戰紀錄
本文以生成 windows 執行檔為前提,著重在環境設定的問題排解
=> 想更好的閱讀體驗,請到Notion 同篇筆記(排版略有差異)

貳、環境確認

要封裝 python 程式,首先環境要正確
感覺很直覺,但實際上坑還蠻深的,陷進去卻不知道錯在哪
所以請就下面幾點檢視一下自己的環境 >w<

  1. 終端機環境必須是 Windows 系統 (生成 windows 執行檔為前提)

    • WSL (Windows Subsystem Linux)
    • ❌ Linux 虛擬機的 Shell
    • ❌ macOS 的 Terminal
    • ✅ Windows PowerShell
    • CMD (命令提示字元)

    pyinstaller 生成的執行檔與系統掛勾
    因此,若想用 pyinstaller 生成「能在windows系統下執行的執行檔」
    就必須在 windows 系統中使用 pyinstaller 處理
    ShellTerminal 自不用說,因為環境本來就不是 windows
    至於 WSL,也就是依附在 Win10 下的 Linux base 附屬系統
    這個附屬系統屬於 Linux 系統,用起來會比 PowerShell 順心,但在此派不上用場
    備註:如果打包成品要在 x32 系統執行,那就必須在 x32 系統上打包,反之則不用

  2. Python 來源有限制

    • ❌ Microsoft Store 安裝的 python
    • ✅ 由 python 官網下載安裝的 python

    pyinstaller 的 github 頁面有提到,使用 Microsoft Store 版本的 python 會導致權限錯誤
    根據實測,使用 Microsoft Store 除了權限錯誤,還需要解決環境變數問題

參、手把手設定環境

雖說是手把手,但我已先假設你用的是 windows 10

a. 安裝 python

已經正常安裝與設定的略過
重申一次,不可用 Microsoft Store 安裝的 python,這是孔明的陷阱

  1. python 官網 下載最新版的 python 安裝程式
    根據 pyinstaller 的 github 頁面,需要 python 3.5-3.8,實測 3.9 也可以運行
  2. 執行安裝程式,勾選「Add Python x.x to PATH」,執行安裝

b. 安裝 pyinstaller

  1. 開啟 PowerShell (不知如何開啟,請參照 「陸、附錄 在指定目錄位置開啟 PowerShell」)

  2. 安裝 pyinstaller

    pip install pyinstaller
    
  3. 確認版號,出現版號即表示安裝成功

    pyinstaller --version
    

肆、疑難排解

若 pyinstaller 安裝成功可顯示版號,可跳過此章節

無法辨識 'pyinstaller' 詞彙是否為 Cmdlet、函數、指令檔或可執行程式的名稱

  • 以上錯誤,可能是因為「python 環境變數未設定成功」,因此找不到已安裝的指令。
  • 請遵循「陸、附錄 設定 python 環境變數」設定

PermissionError: [Errno 13] Permission denied: ...

  • 以上錯誤,可能是因為「使用 Microsoft Store 安裝的 python」
  • 請遵循「參、手把手設定環境 a. 安裝 python」設定 python

伍、使用 Pyinstaller 打包

終於來到正題了

  1. 在要打包的程式目錄開啟 PowerShell (不知如何開啟,請參照 「陸、附錄 在指定目錄位置開啟 PowerShell」)
  2. 打包
    pyinstaller -F <python file>   # 打包成單執行檔,適合小檔
    pyinstaller -D <python file>   # 打包成多個文件,適合框架類程式
    
    # 備註:有時你會需要用下面的方式執行
    python -m PyInstaller -F <python file>
    python -m PyInstaller -D <python file>
    
  3. 現在可以在生成的 dist 資料夾中找到打包的程式

陸、附錄

意下屬於查找工具,如果已經正常運行,就不需要看囉

在指定目錄位置開啟 PowerShell

  1. win + e 開啟檔案總管,選擇希望終端開啟時的目錄位置
  2. Shift + 滑鼠右鍵,開啟選單
  3. 開啟 PowerShell

設定 python 環境變數

如果安裝時忘記設定環境變數,會導致安裝 pyinstaller 後找不到該指令
可以使用 python 安裝程式來設定

  1. python 官網 下載最新版的 python 安裝程式

  2. 執行安裝程式,勾選「Add Python to environment variable」,執行安裝



圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
peter1125
iT邦新手 5 級 ‧ 2022-12-01 21:56:05

這篇非常有用!
我已經用過pyinstaller很多次但還是常採坑
最新的低級錯誤是我用虛擬環境,但沒注意到有個library是裝在外面
pyinstaller沒辦法打包不在虛擬環境內安裝的library所以就出現問題
裝在虛擬環境裡面就好了

秋米苗 iT邦新手 5 級 ‧ 2023-03-01 02:58:01 檢舉

感謝客官喜愛

我要留言

立即登入留言