使用 pyinstaller 打包 py 檔時
發生非常多的 WARNING: lib not found: api-ms-win-crt-*.dll

2019-05-16-pyinstaller.png

那要如何解決這個問題呢?

一般開發者在 Windows 使用 Python 是不會用虛擬環境 (virtualenv)

但這邊我是有使用虛擬環境,但操作差不多~

假如今天我們要打包一個名為 app.py 這個檔案

我們要先建立 app.py 的 spec 檔

pyi-makespec app.py

之後打開 app.spec 如下圖
2019-05-16-pyinstaller.png

紅色框起來就是對於我們打包來說比較重要的幾個參數

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 加入該路徑如下圖
2019-05-16-pyinstaller.png

接著要打包的指令不要傻傻的把 py 檔帶進去
pyinstaller 預設如果是帶 py 檔進去就會重新生成 spec 檔

所以我們要打的指令是

pyinstaller app.spec

就會讀取 app.spec 的內容將 py 檔打包成 exe 然後這樣就不會噴錯啦~