小爬從使用Pyinstaller打包py為exe文件以來,一直都會碰到Warning:lib not found等相關問題,諸如:
雖然大多數時候,您像我一樣忽略這些warning,打包后的exe也能運行。網上有一堆的方法,有建議裝win7的,也有建議換32位python文件的,有提示下載2G大小的相關SDK的。總之,就是pyinstaller對目前的win10支持不夠友好!但是網上這些方法代價太高,那么不改win10 X64系統,不更改 python版本(3.6.4)的情況下,如何優雅地使用pyinstaller且沒有滿屏的warning提示呢?
小爬我經過一番摸索,終於找到了方法,pyinstaller提示找不到的這些dll文件,比如 api-ms-win-crt-runtime-l1-1-0.dll 其實 在win10系統中同樣是存在的,大部分都在:C:\Windows\System32\downlevel路徑和它的上層路徑C:\Windows\System32 下,如下圖:
我們只需要將這兩個路徑加入用戶環境變量即可。
添加完環境變量后,pyinstaller再打包py文件時,會優先在這些路徑查找,就可以成功打包了。PS:記得注銷系統重新登陸后,方能生效!
再次打包,頁面清爽多了,win10 X64下親測有效!
PS:需要注意的是,很多時候我們pyinstaller打包py文件雖然顯示“成功”,但是真正運行exe文件,依舊會報錯,諸如fail to execute script之類,終端界面往往一閃而過,我們肉眼很多時候甚至看不清具體原因!小爬有個笨方法——錄屏。推薦一個好用的錄屏軟件Ocam。肉眼看上去一閃而過的提示信息會被錄屏軟件完整記錄下來,形成mp4文件,我們再借助播放器的暫停功能,就可以定位到錯誤信息。以下是我執行時遇到的幾個錯誤:
這個時候問題就簡單了,比如,上面這兩個圖提示的是,一個找不到模塊distuils,一個提示需要安裝依賴庫xlrd。我們將distuils文件夾從python文件位置對應的lib文件下找到,放到我們的python(env)對應的文件夾下即可,xlrd則直接用pip安裝即可。
ps:如果您要打包的是像我一樣引用了pandas庫的py文件,則程序中盡可能不要直接 import pandas as pd,這樣打包后的exe文件非常大,可以考慮用到什么函數就引用什么函數,如:
如果您在使用pyinstaller時有這類困擾,快用我的方法再試試吧!