pyinstaller模塊


pyinstaller打包圖標資源失效解決方式

1、安裝所需要的pip包

pip install pyinstaller
pip install pyqt5-tools

2、使用qrc配置靜態資源
1)Qt中的qrc文件是一個xml格式的資源配置文件,qrc文件可以用安裝了Qt的vs生成也可以手寫,格式如下:

<RCC>
    <qresource prefix="/">
        <file>文件名</file>
        #多少個文件寫多少行
    </qresource>
</RCC>

2)新建文件resource.qrc

<RCC>
    <qresource prefix="/">
        <file>favicon.ico</file>
        <file>xiaoxi.svg</file>
    </qresource>
</RCC>

3)使用pyrcc5將qrc文件轉為py文件,只要安裝了pyqt5-tools,pyrcc5.exe就在python安裝目錄下的Scripts目錄下:

pyrcc5.exe -o resource.py resource.qrc

4)在需要的地方使用

pyinstaller打包報錯合集以及解決方案

以下解決方案中存在使用spec文件打包的方式,需要執行命令:pyinstaller -D xxx.spec,后面攜帶的任何參數都不會生效,需要進入到xxx.spec文件中,修改文件(只是把命令里攜帶的參數改為在spec文件中而已)。

ValueError: Can’t mix absolute and relative paths

錯誤信息:

E:\python>pyinstaller -F file.py

Traceback (most recent call last):
"""省略一萬字"""
ValueError: Can't mix absolute and relative paths

解決方式:修改命令中目標文件路徑為絕對路徑

E:\python>pyinstaller -F E:\python\file.py

ModuleNotFoundError: No module named ‘win32com’

錯誤信息:

Traceback (most recent call last):
  File "", line 2, in <module>
ModuleNotFoundError: No module named 'win32com'

解決方式:安裝pypiwin32的包

pip install pypiwin32

SyntaxWarning: “is not” with a literal. Did you mean “!=”?

錯誤信息:

15379 INFO: Loading module hook "hook-win32com.py"...
e:\python38\venv\lib\site-packages\win32com\client\makepy.py:369: 
SyntaxWarning: "is not" with a literal. Did you mean "!="?
  if path is not '' and not os.path.exists(path):

解決方式:找到makepy.py:369行,把 if path is not ''改成if path != ‘’。算是警告吧。

WARNING: Hidden import “sip” not found!

錯誤信息:

12659 INFO: Loading module hook "hook-PyQt5.py"...
12778 WARNING: Hidden import "sip" not found!
12778 INFO: Loading module hook "hook-PyQt5.QtCore.py"...

解決方式:
(1)嘗試過,pip install sip,然后文件中 import sip再打包,好像沒用
(2)嘗試過,pyinstaller 命令中添加 --hidden-import sip或者 --hidden-import PyQt5.sip,沒用+1
(3)沒有進行嘗試,在spec文件中的 hiddenimports=[‘sip’],或者hiddenimports=[‘PyQt5’,‘PyQt5.sip’],不知道有沒有效,但是此方式很有用!(因為暫時不知道是缺少sip庫還是PyQt5.sip模塊) 但是后面發現這個warning也不會引起程序有什么問題,就沒管了。

ValueError: too many values to unpack (expected 2)

錯誤信息:

INFO: Appending 'datas' from .spec
Traceback (most recent call last):
"""
"""
ValueError: too many values to unpack (expected 2)

解決方式:使用spec文件進行打包,在datas中添加了一個同路徑下的配置文件時,因為沒有加 () 出現了這個錯誤,要記得datas里面是set()

datas=[('config.ini','.')]

使用 pyinstaller -F 進行打包,運行exe文件,命令行窗口消失太快——打開cmd或者在pycharm terminal里來運行exe文件。

錯誤信息:
出現一連串報錯(這個程序里用了mysql.connector連接mysql數據庫)

OSError: [WinError 10038] 在一個非套接字上嘗試了一個操作。
ModuleNotFoundError: No module named 'mysql.connector.locales.eng'
ImportError: No localization support for language 'eng'
TypeError: catching classes that do not inherit from BaseException is not allowed

解決方式:
使用spec文件打包,修改里面的 hiddenimports=[‘mysql’,‘mysql.connector.locales.eng.client_error’],應該是沒有找到這個文件。

FileNotFoundError: Could not find module ‘libiconv-2.dll’. Try using the full path with constructor syntax.

錯誤信息:

FileNotFoundError: Could not find module 'libiconv-2.dll'. Try using the full path with constructor syntax.
__main__.PyInstallerImportError: Failed to load dynlib/dll 'libiconv-2.dll'. Most probably this dynlib/dll was not found when the application was frozen.
__main__.PyInstallerImportError: Failed to load dynlib/dll 'C:\\Users\\用戶\\AppData\\Local\\Temp\\_MEI63362\\pyzbar\\libiconv-2.dll'. Most probably this dynlib/dll was not found when the application was frozen.

解決方式:

原因是程序里使用了pyzbar,但是沒有找到 libiconv-2.dll 和 libzbar-32.dll,我是直接進 python38\venv\Lib\site-packages\pyzbar 找到pyzbar安裝位置,里面剛好有這兩個dll,把它復制出來到exe同目錄下。 這里應該可以不復制文件,直接添加路徑的

TypeError: ‘NoneType’ object is not subscriptable

錯誤信息:

TypeError: 'NoneType' object is not subscriptable

解決方式:

檢查是否有不該用下標訪問的變量用了下標訪問,比如a=1,a[0],但是我這里的問題應該是變量還沒初始化,就調用了下標,加一個try-except,先讓程序運行起來把變量初始化了就行了。

pyinstaller打包32位程序

目前還有一些電腦是32位的操作系統,但大多數情況下,基本普遍已經都是64位的操作系統,因此我們的64位電腦上安裝的軟件也基本上都是64位的軟件,打包出來的程序也是64位,放在32位的操作系統上沒辦法去運行。(當然32位的軟件放在64位的系統上是沒有問題的,向下兼容。)

實現方式:
不需要更換操作系統,只需要把python環境改為32位的,再重新安裝所用到的庫即可。

實現步驟:
1、下載安裝32位的python軟件
2、使用pip安裝32位的pyinstaller

pip install pyinstaller

3、重新安裝所用的第三方模塊
4、執行打包命令

pyinstaller -F -w -i xxx.ico main.py

使用pip安裝pyinstaller沒有環境變量,可以使用pip uninstall pyinstaller 會列出pyinstaller的安裝全路徑。然后選擇不卸載,復制全路徑去執行命令。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM