1. 程式人生 > >用PyInstaller打包用PyQt5編寫的python程序

用PyInstaller打包用PyQt5編寫的python程序

efi 註意 另一個 基本 module 主程 .py 普通 一是

0.背景

本弱初學PyQt5,寫了一個GUI小程序,但在用PyInstaller打包時出現了不少問題,現將幾個比較大的問題記錄如下,希望以後能記住。

1. 資源打包

首先是資源打包的問題,我寫的程序引用了一張圖片,那麽在沒經過特殊處理的情況下如果想讓程序正常運行,就必須把圖片放在和程序同一個目錄下,但這樣總覺得不太舒服。我在網上看到有三種解決方法:一是通過修改PyInstall配置文件*.spec來實現打包,但是在我的環境下不成功;二是自己寫程序對圖片進行Base64編碼存在字符串裏並存儲在另一個腳本中,然後令主程序import它;三是用PyQt5自帶的工具:pyrcc5進行處理。本質上第三種和第二種的原理是基本一樣的,但本著“不(xiang)重(jin)復(ban)造(fa)輪(tou)子(lan)”的原則,我更喜歡第三種。操作如下:
一、創建一個擴展名為qrc的文件,內容如下(mouse.ico是圖片文件,且<file>標簽可以有多個):

<RCC>
    <qresource prefix="/">
        <file>mouse.ico</file>
    </qresource>
</RCC>

二、在程序目錄執行命令

pyrcc5 images.qrc -o images_qr.py

命令語法類似於gcc,images.qrc是剛才那個文件,images_qr.py是輸出的含有圖片序列化字符串的python文件。
三、在主程序的開頭引用

import images_qr

同時將文中引用圖片的路徑前加冒號

QIcon(‘:mouse.ico‘)

2. PyInstaller打包程序

其次是打包的問題,如果按照普通命令打包,會產生“No module name ‘PyQt5.sip‘”的錯誤,這是因為PyInstaller沒有找全PyQt5依賴包,需要我們親自指定:

pyInstaller --hidden-import PyQt5.sip -F mousenew.py -w -i mouse.ico

這樣就能成功打包了。

3. 總結

註意以後打包時先別帶-w參數,不然打包後的exe如果運行錯誤就直接彈個Fail to execute the script.然後就退出了,連調都沒法調,如果是命令行打包,至少錯了它還會在命令行打印Traceback,等命令行程序沒錯了再加-w。

用PyInstaller打包用PyQt5編寫的python程序