解決Pyinstaller打包為可執(zhí)行文件編碼錯(cuò)誤的問題
錯(cuò)誤信息
UnicodeDecodeError: ‘utf-8' codec can't decode byte 0xce in position ***
解決方案
命令行中先輸入
chcp 65001
再輸入打包命令。
pyinstaller -F xxx.py
補(bǔ)充:pyinstaller打包python程序時(shí)遇到遞歸超界和字符編碼錯(cuò)誤的問題與解決方法
打包命令:pyinstaller -F xx.py
-F一定要加上,其含義是生成獨(dú)立的可執(zhí)行文件
問題一:超過遞歸深度
由于python文件中可能存在遞歸運(yùn)算,實(shí)際執(zhí)行時(shí)沒什么問題,但打包時(shí)報(bào)錯(cuò),錯(cuò)誤信息如下
RecursionError: maximum recursion depth exceeded
大體意思就是說遞歸深度超過程序允許的界限了,最大是1000.
在執(zhí)行完成后雖然報(bào)錯(cuò),但是與xx.py文件同級(jí)目錄下會(huì)生成一個(gè)xx.spec文件,打開這個(gè)文件,xx.py第一行是字符編碼,在代碼的第二三行加入下面兩句代碼。
然后執(zhí)行下面代碼(千萬不要再去執(zhí)行原來的打包命令)
pyinstaller xx.spec
import sys sys.setrecursionlimit(6000)
問題二:打包時(shí)報(bào)告編碼錯(cuò)誤
錯(cuò)誤信息如下:
UnicodeDecodeError: ‘utf-8' codec can't decode byte 0xce in position 121: invalid start byte
可能有點(diǎn)蒙圈,明明代碼中進(jìn)行了代碼聲明為什么還報(bào)錯(cuò),不要慌,在dos窗口(windows+R,輸入cmd)輸入打包命令之前先輸入下面的命令,執(zhí)行回車
chcp 65001
然后再輸入打包命令。如果開始因?yàn)檫f歸出錯(cuò),修改spec文件后又出現(xiàn)編碼錯(cuò)誤,此時(shí)打包命令仍然執(zhí)行
pyinstaller xx.spec
問題三:原代碼中存在的文件讀取路徑,打包后報(bào)錯(cuò),找不到路徑
原來代碼如下:
使用abspath獲取路徑行不通,在程序運(yùn)行時(shí)不會(huì)出錯(cuò),打包時(shí)要替換為下面獲取路徑的代碼
import os path1 = os.path.dirname(os.path.abspath(__file__)) path2 = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
替換為
import os import sys path1 = os.path.dirname(os.path.realpath(sys.executable)) path2 = os.path.dirname(os.path.dirname(os.path.realpath(sys.executable)))
問題四:打包時(shí)沒問題,生成exe閃退,也看不到報(bào)錯(cuò)信息。
解決方法:打開一個(gè)dos窗口,將exe文件拖拽到dos窗口內(nèi),然后回車執(zhí)行。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
Python函數(shù)式編程實(shí)現(xiàn)登錄注冊(cè)功能
這篇文章主要為大家詳細(xì)介紹了Python函數(shù)式編程實(shí)現(xiàn)登錄注冊(cè)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
CentOS 7下Python 2.7升級(jí)至Python3.6.1的實(shí)戰(zhàn)教程
Centos是目前最為流行的Linux服務(wù)器系統(tǒng),其默認(rèn)的Python 2.x,這篇文章主要給大家分享了關(guān)于在CentOS 7下Python 2.7升級(jí)至Python3.6.1的實(shí)戰(zhàn)教程,文中將升級(jí)的步驟一步步的介紹的非常詳細(xì),對(duì)大家的理解和學(xué)習(xí)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-07-07
利用Python實(shí)現(xiàn)面部識(shí)別的方法詳解
人臉識(shí)別正在成為軟件開發(fā)中的一種趨勢(shì)。它有助于識(shí)別人臉并使應(yīng)用程序更加健壯。本文將使用python和face_recognition庫創(chuàng)建一個(gè)簡(jiǎn)單的人臉識(shí)別,需要的可以參考一下2022-05-05
python調(diào)用webservice接口的實(shí)現(xiàn)
這篇文章主要介紹了python調(diào)用webservice接口的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
python調(diào)用可執(zhí)行文件.exe的2種實(shí)現(xiàn)方法
Python是一種流行的編程語言,可以輕松地通過腳本調(diào)用各種應(yīng)用程序,本文就詳細(xì)的介紹了python調(diào)用可執(zhí)行文件.exe的2種實(shí)現(xiàn)方法,感興趣的可以了解一下2023-08-08
Django objects的查詢結(jié)果轉(zhuǎn)化為json的三種方式的方法
這篇文章主要介紹了Django objects的查詢結(jié)果轉(zhuǎn)化為json的三種方式的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11

