溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何解決Pyinstaller打包為可執(zhí)行文件編碼錯(cuò)誤的問題

發(fā)布時(shí)間:2021-03-17 14:16:39 來源:億速云 閱讀:999 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下如何解決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
path2 = os.path.dirname(os.path.abspath(__file__))
path3 = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

替換為

import os
import sys
path2 = os.path.dirname(os.path.realpath(sys.executable))
path3 = os.path.dirname(os.path.dirname(os.path.realpath(sys.executable)))

問題四:打包時(shí)沒問題,生成exe閃退,也看不到報(bào)錯(cuò)信息。

解決方法:打開一個(gè)dos窗口,將exe文件拖拽到dos窗口內(nèi),然后回車執(zhí)行。

以上是“如何解決Pyinstaller打包為可執(zhí)行文件編碼錯(cuò)誤的問題”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI