Pyinstaller 打包exe教程及問(wèn)題解決
安裝
pip insatll Pyinstaller
參數(shù)
pyinstaller -Fw main.py
| 參數(shù) | 概述 |
|---|---|
| -F,-onefile | 打包一個(gè)單個(gè)文件,如果你的代碼都寫(xiě)在一個(gè).py文件的話,可以用這個(gè),如果是多個(gè).py文件就別用 |
| -D, –onedir | 打包多個(gè)文件,在dist中生成很多依賴文件,適合以框架形式編寫(xiě)工具代碼,我個(gè)人比較推薦這樣,代碼易于維護(hù) |
| -K, –tk | 在部署時(shí)包含 TCL/TK |
| -a, –ascii | 不包含編碼.在支持Unicode的python版本上默認(rèn)包含所有的編碼. |
| -d, –debug | 產(chǎn)生debug版本的可執(zhí)行文件 |
| -w,–windowed,–noconsole | 使用Windows子系統(tǒng)執(zhí)行.當(dāng)程序啟動(dòng)的時(shí)候不會(huì)打開(kāi)命令行(只對(duì)Windows有效) |
| -s,–strip | 可執(zhí)行文件和共享庫(kù)將run through strip.注意Cygwin的strip往往使普通的win32 Dll無(wú)法使用. |
| -X, –upx | 如果有UPX安裝(執(zhí)行Configure.py時(shí)檢測(cè)),會(huì)壓縮執(zhí)行文件(Windows系統(tǒng)中的DLL也會(huì))(參見(jiàn)note) |
| -o DIR, –out=DIR | 指定spec文件的生成目錄,如果沒(méi)有指定,而且當(dāng)前目錄是PyInstaller的根目錄,會(huì)自動(dòng)創(chuàng)建一個(gè)用于輸出(spec和生成的可執(zhí)行文件)的目錄.如果沒(méi)有指定,而當(dāng)前目錄不是PyInstaller的根目錄,則會(huì)輸出到當(dāng)前的目錄下. |
| -p DIR, –path=DIR | 設(shè)置導(dǎo)入路徑(和使用PYTHONPATH效果相似).可以用路徑分割符(Windows使用分號(hào),Linux使用冒號(hào))分割,指定多個(gè)目錄.也可以使用多個(gè)-p參數(shù)來(lái)設(shè)置多個(gè)導(dǎo)入路徑,讓pyinstaller自己去找程序需要的資源 |
| –icon=<FILE.ICO> | 將file.ico添加為可執(zhí)行文件的資源(只對(duì)Windows系統(tǒng)有效),改變程序的圖標(biāo) pyinstaller -i ico路徑 xxxxx.py |
| -v FILE, –version=FILE | 將verfile作為可執(zhí)行文件的版本資源(只對(duì)Windows系統(tǒng)有效) |
| -n NAME, –name=NAME | 可選的項(xiàng)目(產(chǎn)生的spec的)名字.如果省略,第一個(gè)腳本的主文件名將作為spec的名字 |
注意事項(xiàng)
- 如果程序有采用外部文件,如配置文件, 需要將文件放在dist中
- -F 適合生成一個(gè)單一可執(zhí)行的文件
- -o 適用于多個(gè)文件引用情況,或者框架的結(jié)構(gòu)
打包進(jìn)程相關(guān)代碼失敗
例如編寫(xiě)一些進(jìn)程相關(guān)的shell命令,打包失敗,一般是使用 -F 可以成功,但是執(zhí)行exe時(shí)有cmd彈窗,這非常不美觀, 如果使用-Fw c參數(shù)執(zhí)行exe 直接失敗。 這種情況有兩種解決方案。
方案一: 使用 pyinstaller -Dw file.py 生成的是一個(gè)目錄文件。 程序執(zhí)行成功,無(wú)黑名終端彈窗情況。
方案二: 起用 os.popen() 方法, 改用subprocess.Popen() 模塊
下面是我的測(cè)試,親測(cè)成功, 參數(shù)一定要配置好,否則程序執(zhí)行失??!
import subprocess
def checkprocess():
processnames = ['EXCEL.EXE']
for processname in processnames:
p = subprocess.Popen('taskkill /F /IM %s' %processname,shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
p.wait()
checkprocess()
有空寫(xiě)一個(gè) 關(guān)于subprocess的教程,詳細(xì)研究一下他的參數(shù)配置
工欲善其事,必先利其器!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python模塊shutil函數(shù)應(yīng)用示例詳解教程
這篇文章主要為大家介紹了python模塊中shutil函數(shù)的應(yīng)用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-10-10
Python PyMuPDF實(shí)現(xiàn)PDF與圖片和PPT相互轉(zhuǎn)換
能夠用來(lái)對(duì)PDF文檔進(jìn)行操作的Python包有好幾個(gè),如提取內(nèi)容的PdfPlumber、PDFMiner,可以用來(lái)對(duì)PDF文件進(jìn)行修改操作的PyPDF2等等,如果只是需要簡(jiǎn)單地對(duì)PDF文件實(shí)現(xiàn)合并、拆分、書(shū)簽操作,使用PyPDF2就足以滿足。但如果想對(duì)PDF文件進(jìn)行一些底層操作,基本上只有PyMuPDF了2022-12-12
基于Python創(chuàng)建可定制的HTTP服務(wù)器
這篇文章主要為大家演示一下如何使用?http.server?模塊來(lái)實(shí)現(xiàn)一個(gè)能夠發(fā)布網(wǎng)頁(yè)的應(yīng)用服務(wù)器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-05-05
python實(shí)現(xiàn)順序表的簡(jiǎn)單代碼
這篇文章主要為大家詳細(xì)介紹了順序表定義及python實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09
Python 利用高德地圖api實(shí)現(xiàn)經(jīng)緯度與地址的批量轉(zhuǎn)換
這篇文章主要介紹了Python 利用高德地圖api實(shí)現(xiàn)經(jīng)緯度與地址的批量轉(zhuǎn)換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Python實(shí)現(xiàn)身份證號(hào)碼解析
本文給大家匯總介紹下使用Python實(shí)現(xiàn)身份證號(hào)碼驗(yàn)證解析的幾個(gè)方法,有需要的小伙伴可以參考下。2015-09-09
關(guān)于Python如何避免循環(huán)導(dǎo)入問(wèn)題詳解
在大型的Python工程中,由于架構(gòu)設(shè)計(jì)不當(dāng),可能會(huì)出現(xiàn)模塊間相互引用的情況。下面這篇文章主要給大家介紹了關(guān)于如何避免Python的循環(huán)導(dǎo)入問(wèn)題的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-09-09

