pyinstaller打包單個(gè)exe后無(wú)法執(zhí)行錯(cuò)誤的解決方法
1、執(zhí)行環(huán)境說(shuō)明
python版本3.7
直接使用pip進(jìn)行安裝pywin32、pyinstaller
pip install pywin32
pip install pyinstaller
2、使用了第三方庫(kù)的情況
建議在打包之前務(wù)必找到第三方庫(kù)的包,把包復(fù)制到到跟myfile.py同目錄下,然后再使用以上2種方式打包,否則會(huì)打包失敗或者即使打包成功,程序也會(huì)閃退。pyinstaller -p參數(shù)是添加的pyinstaller打包程序時(shí)的掃描路徑,假設(shè)venv\Lib\site-packages是包存放路徑,那么也可以使用以下命令打包:
pyinstaller -p venv\Lib\site-packages -F xxx.py
3、failed to execute script 錯(cuò)誤
首先使用
pyinstaller -F -w code.py
進(jìn)行exe打包,得到的單個(gè).exe文件,運(yùn)行后提示failed to execute script 錯(cuò)誤
排錯(cuò)過(guò)程:使用pyinstaller -D code.py進(jìn)行exe打包,得到一個(gè)目錄文件,通過(guò)命令行執(zhí)行.exe文件提示The 'six' package is required; normally this is bundled with this package錯(cuò)誤
說(shuō)明pyinstaller打包后,需要six等庫(kù),最終確認(rèn)需要在code.py中添加以下庫(kù):
import six import packaging import packaging.version import packaging.specifiers import packaging.requirements
當(dāng)然,six和packaging庫(kù)建議使用pip安裝。加入以上庫(kù)后,使用pyinstaller -D code.py打包執(zhí)行不再出錯(cuò)。
4、找不到數(shù)據(jù)文件夾
有些程序包含了數(shù)據(jù)文件夾,不能直接按資源文件方式打包,需要在執(zhí)行文件所在的文件夾內(nèi)創(chuàng)建這些數(shù)據(jù)文件。一般情況下在腳本中我們可以使用os.path.split(os.path.abspath( __file__))來(lái)的到code.py的路徑,然后拼接得到數(shù)據(jù)文件夾。但之后使用pyinstaller -F code.py打包成單個(gè)exe文件,在未讀取數(shù)據(jù)文件夾的情況下運(yùn)行正常,一旦打開數(shù)據(jù)文件,就會(huì)閃退,命令行窗口會(huì)顯示打不開數(shù)據(jù)文件。因?yàn)镻yInstaller會(huì)創(chuàng)建臨時(shí)文件夾temp,程序代碼在這個(gè)臨時(shí)文件夾中運(yùn)行,我們可以用以下幾個(gè)語(yǔ)句來(lái)查看正式運(yùn)行路徑:
import sys import os print(sys.path[0]) print(sys.argv[0]) print(os.path.dirname(os.path.realpath(sys.executable))) print(os.path.dirname(os.path.realpath(sys.argv[0])))
得到的結(jié)果是os.path.dirname(os.path.realpath(sys.executable))和os.path.dirname(os.path.realpath(sys.argv[0]))才是含數(shù)據(jù)文件夾的路徑。因此可以按如下方式取得文件路徑,然后根據(jù)需要拼接得到數(shù)據(jù)文件夾的真實(shí)路徑:
if hasattr(sys, '_MEIPASS'):
# PyInstaller會(huì)創(chuàng)建臨時(shí)文件夾temp
# 并把路徑存儲(chǔ)在_MEIPASS中
self.appPath = os.path.dirname(os.path.realpath(sys.executable))
else:
self.appPath, filename = os.path.split(os.path.abspath( __file__))
修改完成后,分別以以下三種方式打包,運(yùn)行成功
pyinstaller -D code.py pyinstaller -F code.py pyinstaller -w -F code.py
以上這篇pyinstaller打包單個(gè)exe后無(wú)法執(zhí)行錯(cuò)誤的解決方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python標(biāo)準(zhǔn)庫(kù)os.path包、glob包使用實(shí)例
這篇文章主要介紹了Python標(biāo)準(zhǔn)庫(kù)os.path包、glob包使用實(shí)例,本文直接給出代碼,代碼中有詳細(xì)注釋,需要的朋友可以參考下2014-11-11
Python通過(guò)dxfgrabber庫(kù)實(shí)現(xiàn)獲取CAD信息
dxfgrabber?是一個(gè)?Python?庫(kù),用于讀取和解析?AutoCAD?DXF(Drawing?Exchange?Format)文件,本文就來(lái)教教大家如何利用dxfgrabber庫(kù)實(shí)現(xiàn)獲取CAD信息吧2023-06-06
python中dropna()函數(shù)的作用舉例說(shuō)明
這篇文章主要給大家介紹了關(guān)于python中dropna()函數(shù)的相關(guān)資料,dropna()是pandas庫(kù)中的一個(gè)函數(shù),用于刪除DataFrame中的缺失值,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11
pandas實(shí)現(xiàn)datetime64與unix時(shí)間戳互轉(zhuǎn)
這篇文章主要介紹了pandas實(shí)現(xiàn)datetime64與unix時(shí)間戳互轉(zhuǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
python3.6之xlwt如何設(shè)置單元格對(duì)齊方式
這篇文章主要介紹了python3.6之xlwt如何設(shè)置單元格對(duì)齊方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
python棧實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換的示例詳解
棧(Stack)是計(jì)算機(jī)科學(xué)中常用的數(shù)據(jù)結(jié)構(gòu),具有眾多實(shí)際應(yīng)用,其中之一是使用棧來(lái)實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換,將一個(gè)數(shù)字從一種進(jìn)制表示轉(zhuǎn)換為另一種進(jìn)制表示,本文將深入研究棧的原理,以及如何使用Python實(shí)現(xiàn)十進(jìn)制到二進(jìn)制、八進(jìn)制和十六進(jìn)制的進(jìn)制轉(zhuǎn)換,需要的朋友可以參考下2023-11-11
python處理emoji表情(兩個(gè)函數(shù)解決兩者之間的聯(lián)系)
這篇文章主要介紹了python處理emoji表情,主要通過(guò)兩個(gè)函數(shù)解決兩者之間的聯(lián)系,本文通過(guò)實(shí)例代碼給大家介紹的非常完美,對(duì)python emoji表情的相關(guān)知識(shí)感興趣的朋友一起看看吧2021-05-05

