官網
PyInstaller官方網站:http://www.pyinstaller.org/
國内鏡像庫
PyInstaller Gitee:https://gitee.com/mirrors/pyinstaller
簡介
在開發一些小工具給他人使用時,他人的系統中可能并沒有安裝python環境或沒有安裝相應的第三方庫,要求對方安裝不怎麼現實,特别是對方不是技術人員的時候,此時将開發好的腳步通過pyinstaller打包成一個可執行檔案是個不錯的選擇。
pyinstaller本身可以跨平台使用,但這裡的跨平台指的是pyinstaller本身,通過pyinstaller打包出來的檔案是無法跨平台的,在MacOS下使用pyinstaller打包python程式,打包後的内容隻可在MacOS下運作,在windwos下打包的python程式,隻可在Windows下運作。
安裝Pyinstaller
-
安裝pywin32
下載下傳安裝檔案:查找到跟自己适用的python版本及window系統版本比對的pywin32,下載下傳後安裝
使用pip指令安裝:pip install pywin32
-
安裝Pyinstaller
下載下傳安裝檔案安裝:官網
使用pip指令安裝:pip install pyinstaller
使用Pyinstaller
打包方式
-
使用下載下傳Pyinstaller打包方式
将需要打包的檔案放在解壓得到的Pyinstaller檔案夾中,打開cmd視窗,把路徑切換到目前路徑打開指令提示行,輸入以下内容(最後的是檔案名):
python pyinstaller.py -F myfile.py
-
使用pip Pyinstaller打包方式
打開cmd視窗,把路徑切換到檔案所在路徑(檔案随便放在哪裡都行)打開指令提示行,輸入以下内容(最後的是檔案名):
pyinstaller -F myfile.py
打包參數
pyinstaller最重要的兩個參數就是-F與-D參數
- -F:表示在 dist 檔案夾下隻生成單個可執行檔案(内部包含所有依賴),不加預設會在 dist 生成一大堆依賴檔案 + 可執行檔案。
- -D:與 -F 相反用法。
- -W:表示去掉控制台視窗,如果你的程式是有界面的,可以不寫這個參數。但是測試情況下建議先加上這個參數,因為如果打包不成功,運作時報錯資訊會在控制台上輸出,沒有控制台就看不到報錯資訊。
- -c:表示去掉窗框,使用控制台。
- -p:表示指定程式的依賴庫位置或者自己定義需要加載的類路徑,項目中包含多個自模組化塊的時候需要加上 -p aaa.py -p bbb.py -p ccc.py
Ps:不指定依賴庫無法打包應用程式。
- -i:表示可執行檔案的圖示,後面跟圖示的路徑(例 -i "icon.icns",Mac 下圖示檔案為 icns 格式, Win 為ico 格式)。
- -n:設定打包後的應用名稱,例 -n "小程式"。
- --hidden-import:後面跟子產品名如 queue,用于告訴打包程式某個子產品我用不着你不用打包進去。
打包指令
綜上所述,最常用的指令為:
# 常用打包參數
# -F -D 互斥參數
-F 打包成一個 exe 檔案,小項目可以采用,打開比較慢,多個 .py 打包時不能使用
-D 預設參數,打包結果放入到建立的檔案夾中,可以看到裡面有很多的依賴檔案
# -w -c 互斥參數
-w 使用項目的 GUI 界面,無 cmd 控制台
-c 預設參數,使用 cmd 控制台 如果打封包件執行報錯,可嘗試用 -c 顯示控制台
-n 執行項目的名稱,預設 .py 的檔案名
-i 将 ico 圖示打包到 exe 檔案中,(例 `-i "icon.icns"`,`Mac` 下圖示檔案為 `icns` 格式, `Win` 為`ico` 格式)。
--hidden-import 打包時導包資訊
# 打包 PyQt 項目強烈建議 帶上以下參數
--hidden-import PyQt5.sip
# 打包指令示例
# 在項目的根目錄下執行打包指令
pyinstaller -F SendMsgPerson2.py -i favicon.ico -p D:\work\tools\Python\Python36\Lib\site-packages -n 二級拉動(超過3天)
# 打包結果輸出在項目根目錄下的 dist 檔案夾中
# 不建議使用 -F 打包成一個 exe 檔案 所謂:打包一時爽,打開 5 秒鐘
# 非 -F 指令下, 靜态資源、建好的 Sqlite 資料庫可以直接放入 dist 中生成的檔案夾中
打包步驟
- 第一步,在App根目錄輸出cmd,進入指令視窗
- 第二步,在App根目錄放入favicon.ico圖示作為exe可執行檔案的Logo
- 第三步,輸入下面的指令進行打包
pyinstaller -F SendMsgPerson2.py -i favicon.ico -p D:\work\tools\Python\Python36\Lib\site-packages -n 二級拉動(超過3天)
- 第四步,生成spec檔案和exe可執行檔案
- 第五步,借助Windows系統的“任務計劃程式”定時執行exe可執行檔案
分級拉動指令如下:
- pyinstaller -F SendTestTaskPerson.py -i favicon.ico -p D:\work\tools\Python\Python36\Lib\site-packages -n 分級拉動(測試單提醒)
- pyinstaller -F SendMsgPerson.py -i favicon.ico -p D:\work\tools\Python\Python36\Lib\site-packages -n 分級拉動(全部)
- pyinstaller -F SendBugPerson.py -i favicon.ico -p D:\work\tools\Python\Python36\Lib\site-packages -n 分級拉動(缺陷提醒)
- pyinstaller -F SendBugRobotCard.py -i favicon.ico -p D:\work\tools\Python\Python36\Lib\site-packages -n 分級拉動(缺陷提醒機器人)
- pyinstaller -F SendStoryPerson.py -i favicon.ico -p D:\work\tools\Python\Python36\Lib\site-packages -n 分級拉動(BUG轉需求提醒)
- pyinstaller -F SendZentaoDataPerson.py -i favicon.ico -p D:\work\tools\Python\Python36\Lib\site-packages -n 個性化提醒(禅道與釘釘昨日資料)
- pyinstaller -F SendDruidPersonDev.py -i favicon.ico -p D:\work\tools\Python\Python36\Lib\site-packages -n 接口性能自動化巡檢機器人(開發環境)
- pyinstaller -F SendDruidPersonTest.py -i favicon.ico -p D:\work\tools\Python\Python36\Lib\site-packages -n 接口性能自動化巡檢機器人(測試環境)
- pyinstaller -F SendDruidPersonProd.py -i favicon.ico -p D:\work\tools\Python\Python36\Lib\site-packages -n 長春軌道交通營運-接口性能巡檢機器人(生産環境)
- pyinstaller -F SendDruidPersonProd1.py -i favicon.ico -p D:\work\tools\Python\Python36\Lib\site-packages -n 長春軌道交通營運-讀取接口平均耗時(生産環境)
- pyinstaller -F -w GuiLoginPage.py -i favicon.ico -p D:\work\tools\Python\Python36\Lib\site-packages -n 接口性能巡檢機器人配置助手