使用 pyinstaller 打包 py 檔時
發生非常多的 WARNING: lib not found: api-ms-win-crt-*.dll
那要如何解決這個問題呢?
一般開發者在 Windows 使用 Python 是不會用虛擬環境 (virtualenv)
但這邊我是有使用虛擬環境,但操作差不多~
假如今天我們要打包一個名為 app.py
這個檔案
我們要先建立 app.py
的 spec 檔
pyi-makespec app.py |
之後打開 app.spec
如下圖
紅色框起來就是對於我們打包來說比較重要的幾個參數
pathex
: 打包時要用到的檔案之環境路徑datas
: 打包完成後程式會使用到的檔案hiddenimports
: 手動 import 該程式會使用到的 lib 或者自己寫的 modules
要解決 lib not found 的問題就是要 pathex
這個
在加入路徑前我們要先安裝 Windows SDK
因為 Windows 本身沒有內建這些 dll 檔
安裝完成後到你的安裝目錄 (這邊因人而異,也有可能因版本不同所以有些出入)C:\Program Files (x86)\Windows Kits\10\Redist\10.0.18362.0\ucrt\DLLs
到這個路徑之後會看到有 x64
, x86
, arm
三個資料夾
接著就是依照你的 python 版本去選擇資料夾
因為我的 python 是 64bit 所以我就選擇 x64
在 app.spec
中的 pathex
加入該路徑如下圖
接著要打包的指令不要傻傻的把 py 檔帶進去
pyinstaller 預設如果是帶 py 檔進去就會重新生成 spec 檔
所以我們要打的指令是
pyinstaller app.spec |
就會讀取 app.spec 的內容將 py 檔打包成 exe 然後這樣就不會噴錯啦~