使用pyinstaller將python打包爲exe

原由是從某 hub 發現了一個B站掛機助手,依賴於直播的一個庫,做者的處理方式是將依賴的庫打包爲 exe,而後使用 python 進行調用。javascript

而後由於依賴的 live 庫版本太舊有 bug,做者也沒有更新打包的 exe 文件,只能本身動手,進行替換。java

準備工做

首先固然是安裝 pyinstallerpython

pip install pyinstaller數組

PyInstaller 是一個十分有用的第三方庫,能夠用來打包 python 應用程序,打包完的程序就能夠在沒有安裝 Python 解釋器的機器上運行了。

它可以在 Windows、Linux、 Mac OS X 等操做系統下將 Python 源文件打包,經過對源文件打包, Python 程序能夠在沒有安裝 Python 的環境中運行,也能夠做爲一個 獨立文件方便傳遞和管理。ui

使用

通常的用法網上能搜出一大把,常規流程:操作系統

pyinstaller -F helloworld.py命令行

其中,-F 表示打包成單獨的 .exe 文件,這時生成的 .exe 文件會比較大,並且運行速度回較慢。日誌

另外,
-i 還能夠指定可執行文件的圖標;
-w 表示去掉控制檯窗口,這在 GUI 界面時很是有用。不過若是是命令行程序的話那就把這個選項刪除吧!code

執行步驟:圖片

一、在腳本目錄生成 helloworld.spec 文件;
二、建立一個 build 目錄;
三、寫入一些日誌文件和中間流程文件到 build 目錄;
四、建立 dist 目錄;
五、生成可執行文件到 dist 目錄;

打包靜態文件

當你的代碼須要調用一些圖片和資源文件的,這是不會自動導入的,須要你本身手動複製進去才行。否則 exe 文件運行時命令窗口會報錯找不到這個文件。

仍是先看常規作法;
使用 pyi-makespec 生成預處理文件:

pyi-makespec -F helloworld.py

此時會生成一個 .spec 文件,這個文件會告訴 pyinstaller 如何處理你的腳本,pyinstaller 建立一個 exe 的文件就是依靠它裏面的內容進行執行的。

修改預處理文件,將須要的靜態資源加入進去:

// 修改前
datas=[]
// 修改後
datas=[('test.txt','.')]

最後,執行生成 exe 文件:

pyinstaller helloworld.spec

以上內容主要摘錄自 https://zhuanlan.zhihu.com/p/...


固然,我沒那麼幸運,按照一頓操做並無成功,對於預處理文件,上面寫的也不是很清楚,因而研究了下,最終也算是成功了。

配置文件是不須要打包的,程序運行時也會自動讀取,根據錯誤信息,我這個須要依賴的有兩個 data.db 文件,通過搜索分別在當前目錄的 dyn 和 substance 文件夾下,因此你須要這麼寫:

datas=[('dyn\\data.db', 'dyn'), ('substance\\data.db', 'substance')]

解釋下,datas 是一個數組,每個文件用 (a,b) 進行描述,其中 a 是源文件,也就是你要打包的文件,記得轉義符;
b 是目標路徑,也就是最終打包 exe 執行時,它須要把這些靜態資源解壓出來,那麼解壓到哪裏呢就須要 b 來指定,它是一個文件夾,保險起見我設置跟原來同樣的名字(路徑)。

若是靜態資源比較少的話,能夠使用命令行來快速打包:

pyinstaller -F showlist.py --add-data poetry;poetry --add-data list.txt;.

使用的是 --add-data 命令,後面跟源與目標路徑,中間用分號分割,這種方式卻是不用轉義了。

相關文章
相關標籤/搜索