將python flask項(xiàng)目打包成可以運(yùn)行的軟件的全過(guò)程(包含報(bào)錯(cuò)解決)
將python flask項(xiàng)目打包成可以用運(yùn)行的軟件(包含報(bào)錯(cuò)解決)
準(zhǔn)備好要打包的flask項(xiàng)目,如下圖run.py文件的代碼
導(dǎo)入打包函數(shù)庫(kù)pyinstaller
pip install pyinstaller
執(zhí)行打包指令,參數(shù)如下表所示
命令 | 解釋 |
---|---|
pyinstaller -F run.py | 只在dist文件夾中生成一個(gè)程序run.exe文件,適用于一個(gè)模塊沒(méi)有多依賴.py文件 |
pyinstaller -D run.py | 默認(rèn)選項(xiàng),除了主程序run.exe外,還會(huì)在在dist文件夾中生成很多依賴文件 |
pyinstaller -C run.py | 默認(rèn)選項(xiàng),只對(duì)windows有效,使用控制臺(tái) |
pyinstaller -w run.py | 只對(duì)windows有效,不使用控制臺(tái) |
pyinstaller -p D:\project\run.py | 設(shè)置導(dǎo)入路徑 |
pyinstaller -i D:\run.ico demo.py | 給生成的demo.exe文件設(shè)置一個(gè)自定義的圖標(biāo) |
推薦執(zhí)行
pyinstaller -D run.py
如果項(xiàng)目里的引入的函數(shù)庫(kù)很多的話需要執(zhí)行一段時(shí)間
執(zhí)行成功后會(huì)出現(xiàn)build和dist兩個(gè)文件夾和一個(gè)run.spec(這個(gè)文件后面會(huì)說(shuō)明用處),并且在dist/run下有一個(gè)run.exe,這個(gè)就是打包好的flask項(xiàng)目的可執(zhí)行程序了,但是到這里還沒(méi)有結(jié)束,需要雙擊run.exe來(lái)測(cè)試是否打包成功,雙擊會(huì)出現(xiàn)兩種情況
①雙擊后產(chǎn)生如下的黑框框,那么說(shuō)明打包程序沒(méi)有問(wèn)題,可以正常啟動(dòng),這個(gè)時(shí)候可以使用api測(cè)試軟件來(lái)測(cè)試一下程序是否沒(méi)有問(wèn)題。
②雙擊后快速?gòu)棾隽撕诳蚩蛑缶拖Я耍f(shuō)明打包程序有報(bào)錯(cuò),沒(méi)有辦法順利啟動(dòng),這個(gè)時(shí)候就需要去找到報(bào)錯(cuò)原因了,
在Terminal中找到run.exe所在的目錄,執(zhí)行run.exe
比如我這里就是產(chǎn)生了如下報(bào)錯(cuò)
通過(guò)看報(bào)錯(cuò)原因可以知道代碼中少了damageLib.bases.damageState函數(shù)庫(kù)(其他項(xiàng)目也可能會(huì)出現(xiàn) No module named 'xxxxx’的報(bào)錯(cuò),解決辦法都是一樣的),所以需要到run.spec中來(lái)添加這個(gè)函數(shù)庫(kù)。
打開(kāi)run.spec,可以看到如下
# -*- mode: python ; coding: utf-8 -*- block_cipher = None a = Analysis( ['run.py'], pathex=[], binaries=[], datas=[], hiddenimports=[], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False, ) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE( pyz, a.scripts, [], exclude_binaries=True, name='run', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, ) coll = COLLECT( exe, a.binaries, a.zipfiles, a.datas, strip=False, upx=True, upx_exclude=[], name='run', )
這里主要是在hiddenimports=[]中添加對(duì)應(yīng)的函數(shù)庫(kù)(如果項(xiàng)目中有需要用到其他文件夾的時(shí)候也會(huì)報(bào)錯(cuò),那么就在datas=[]中添加就行,示例如下datas=[(“yolo/*”,“yolo”) 意思就是把yolo文件夾打包到程序中)
因?yàn)閯偛攀侨鄙倭薲amageLib.bases.damageState,那么這里就改成hiddenimports=[“damageLib.bases.damageState”]
這個(gè)時(shí)候重新打包需要用到的指令如下(在運(yùn)行過(guò)程中需要輸入‘y’,因?yàn)橐采w之前打包失敗的文件)
pyinstaller run.spec
之后的操作跟之前一樣,雙擊run.exe來(lái)看看程序能不能順利啟動(dòng),如果還會(huì)閃退黑框框,那么就再執(zhí)行上面的操作來(lái)找到報(bào)錯(cuò)原因,直到最后能順利的啟動(dòng)項(xiàng)目。
最后一步,使用nsis把文件夾打包成windows的安裝包
進(jìn)入官網(wǎng)https://nsis.sourceforge.io/Download進(jìn)行下載,這里建議使用外網(wǎng)下載。
之后傻瓜式安裝。
點(diǎn)擊進(jìn)入這里,在此之前,要將之前項(xiàng)目中的dist/run下的所有文件壓縮成run.zip,隨后在這里加載剛才的run.zip,并點(diǎn)擊Generate后可以了(點(diǎn)擊之后會(huì)進(jìn)入新的界面,這個(gè)界面會(huì)卡很久很久,一定要耐心等待,完成后會(huì)在dist文件夾下出現(xiàn)一個(gè)run軟件,把這個(gè)發(fā)送給別人安裝就可以順利執(zhí)行了)
以上就是將python flask項(xiàng)目打包成可以運(yùn)行的軟件的全過(guò)程(包含報(bào)錯(cuò)解決)的詳細(xì)內(nèi)容,更多關(guān)于python flask項(xiàng)目打包的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
無(wú)法使用pip命令安裝python第三方庫(kù)的原因及解決方法
今天小編就為大家分享一篇無(wú)法使用pip命令安裝python第三方庫(kù)的原因及解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06python中pip安裝庫(kù)時(shí)出現(xiàn)Read?timed?out解決辦法
最近需要使用pip庫(kù),安裝的時(shí)候出現(xiàn)問(wèn)題,本文就詳細(xì)的介紹一下python中pip安裝庫(kù)時(shí)出現(xiàn)Read?timed?out解決辦法,具有一定的參考價(jià)值,感興趣的可以了解一下2022-03-03opencv python截取圓形區(qū)域的實(shí)現(xiàn)
本文主要介紹了opencv python截取圓形區(qū)域的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08使用python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的圖片爬蟲(chóng)
在本文中,我們將學(xué)習(xí)如何使用Python創(chuàng)建一個(gè)簡(jiǎn)單的圖片爬蟲(chóng),我們將利用requests庫(kù)來(lái)發(fā)送HTTP請(qǐng)求,BeautifulSoup庫(kù)來(lái)解析HTML頁(yè)面,以及os和shutil庫(kù)來(lái)下載和保存圖片,通過(guò)這個(gè)教程,你將學(xué)會(huì)如何爬取網(wǎng)頁(yè)上的圖片并保存到本地,需要的朋友可以參考下2024-02-02python 讀文件,然后轉(zhuǎn)化為矩陣的實(shí)例
下面小編就為大家分享一篇python 讀文件,然后轉(zhuǎn)化為矩陣的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04tkinter禁用(只讀)下拉列表Combobox問(wèn)題
這篇文章主要介紹了tkinter禁用(只讀)下拉列表Combobox問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01