pyinstaller打包單個exe后無法執(zhí)行錯誤的解決方法
1、執(zhí)行環(huán)境說明
python版本3.7
直接使用pip進(jìn)行安裝pywin32、pyinstaller
pip install pywin32
pip install pyinstaller
2、使用了第三方庫的情況
建議在打包之前務(wù)必找到第三方庫的包,把包復(fù)制到到跟myfile.py同目錄下,然后再使用以上2種方式打包,否則會打包失敗或者即使打包成功,程序也會閃退。pyinstaller -p參數(shù)是添加的pyinstaller打包程序時的掃描路徑,假設(shè)venv\Lib\site-packages是包存放路徑,那么也可以使用以下命令打包:
pyinstaller -p venv\Lib\site-packages -F xxx.py
3、failed to execute script 錯誤
首先使用
pyinstaller -F -w code.py
進(jìn)行exe打包,得到的單個.exe文件,運行后提示failed to execute script 錯誤
排錯過程:使用pyinstaller -D code.py進(jìn)行exe打包,得到一個目錄文件,通過命令行執(zhí)行.exe文件提示The 'six' package is required; normally this is bundled with this package錯誤
說明pyinstaller打包后,需要six等庫,最終確認(rèn)需要在code.py中添加以下庫:
import six import packaging import packaging.version import packaging.specifiers import packaging.requirements
當(dāng)然,six和packaging庫建議使用pip安裝。加入以上庫后,使用pyinstaller -D code.py打包執(zhí)行不再出錯。
4、找不到數(shù)據(jù)文件夾
有些程序包含了數(shù)據(jù)文件夾,不能直接按資源文件方式打包,需要在執(zhí)行文件所在的文件夾內(nèi)創(chuàng)建這些數(shù)據(jù)文件。一般情況下在腳本中我們可以使用os.path.split(os.path.abspath( __file__))來的到code.py的路徑,然后拼接得到數(shù)據(jù)文件夾。但之后使用pyinstaller -F code.py打包成單個exe文件,在未讀取數(shù)據(jù)文件夾的情況下運行正常,一旦打開數(shù)據(jù)文件,就會閃退,命令行窗口會顯示打不開數(shù)據(jù)文件。因為PyInstaller會創(chuàng)建臨時文件夾temp,程序代碼在這個臨時文件夾中運行,我們可以用以下幾個語句來查看正式運行路徑:
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ù)文件夾的真實路徑:
if hasattr(sys, '_MEIPASS'):
# PyInstaller會創(chuàng)建臨時文件夾temp
# 并把路徑存儲在_MEIPASS中
self.appPath = os.path.dirname(os.path.realpath(sys.executable))
else:
self.appPath, filename = os.path.split(os.path.abspath( __file__))
修改完成后,分別以以下三種方式打包,運行成功
pyinstaller -D code.py pyinstaller -F code.py pyinstaller -w -F code.py
以上這篇pyinstaller打包單個exe后無法執(zhí)行錯誤的解決方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python機(jī)器學(xué)習(xí)之手寫KNN算法預(yù)測城市空氣質(zhì)量
KNN(K-Nearest Neighbor)最鄰近分類算法是數(shù)據(jù)挖掘分類(classification)技術(shù)中常用算法之一,本文將介紹如何通過KNN算法實現(xiàn)城市空氣質(zhì)量的預(yù)測,感興趣的同學(xué)可以了解一下2021-12-12
python中@property和property函數(shù)常見使用方法示例
這篇文章主要介紹了python中@property和property函數(shù)常見使用方法,結(jié)合實例形式分析了Python @property和property函數(shù)功能、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下2019-10-10

