Python pyinstaller實現(xiàn)圖形化打包工具
1.簡介
一個使用Python PYQT5制作的關(guān)于pyinstaller打包工具,代替?zhèn)鹘y(tǒng)的cmd黑窗口模式打包頁面,實現(xiàn)更快捷方便的python打包體驗。資源已打包,大家可自行下載。
相關(guān)功能:
- 識別是否安裝了pyinstaller,如果沒有的話,打開在左上角會提示,并在右上角增加“安裝”按鈕。
- 打包過程設(shè)置為隱式。并且加入“顯示處理”選項。
- 支持一鍵拖拽文件以及自動選擇文件。
- 支持導(dǎo)出到桌面以及設(shè)置打包好的軟件圖標(biāo)。
pyinstaller 相關(guān)參數(shù):
-F 制作獨立的可執(zhí)行程序
-D 制作出的檔案存放在同一個文件夾下(默認(rèn)值)
-K 包含TCL/TK(對于使用了TK的,最好加上這個選項,否則在未安裝TK的電腦上無法運行)
-w 制作窗口程序
-c 制作命令行程序(默認(rèn))
-X 制作使用UPX壓縮過的可執(zhí)行程序(推薦使用這個選項,需要下載UPX包,解壓后upx.exe放在Python(非PyInstaller)安裝目錄下,下載upx308w.zip)
-o DIR 指定輸出SPEC文件路徑(這也決定了最后輸出的exe文件路徑)
–icon=[ICO文件路徑] 指定程序圖標(biāo)
-v [指定文件] 指定程序版本信息
-n [指定程序名] 指定程序名稱
–distpath=D:/dist 輸出到指定位置
2.運行效果

3.相關(guān)源碼
from PyQt5.QtWidgets import QWidget, QApplication, QPushButton, QTextEdit, QCheckBox, QLabel, QFileDialog
from PyQt5.QtGui import QIcon
import sys
import os
import subprocess
class WinDow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Pyinstaller圖形化打包工具")
self.setMinimumSize(500 , 300)
self.setMaximumSize(500 , 300)
self.setWindowIcon(QIcon("pussy.ico"))
self.wenjian_ui()
self.ico_ui()
self.anniu_ui()
self.qingchu_ui()
self.zhuomian_ui()
self.tishi_ui()
self.banben_ui()
self.anzhuang_ui()
self.anzhuang_anniu()
self.xianshi_anniu()
self.tishi2_ui()
self.minglingchuang_ui()
self.tishi3_ui()
self.wenjian_anniu()
self.ico_anniu()
self.sczdwz_ui()
self.sczdwz_xx()
self.baocun_anniu()
self.sczdwz_tishi()
def wenjian_ui(self):
wenjian = QTextEdit(self)
self.wenjian = wenjian
wenjian.resize(480-50-20 , 150-50-50)
wenjian.move(10,30)
wenjian.setPlaceholderText("可拖拽py文件至此:")
wenjian.setTabChangesFocus(True)
def ico_ui(self):
ico = QTextEdit(self)
self.ico = ico
ico.resize(480-50-20 , 50)
ico.move(10,190-50-50)
ico.setPlaceholderText("可拖拽ico文件至此:")
ico.setTabChangesFocus(True)
def anniu_ui(self):
anniu = QPushButton(self)
self.anniu = anniu
anniu.setText("打包生成EXE")
anniu.move(415 , 340-105)
anniu.resize(80,60)
self.anniu.clicked.connect(self.anniu_cao)
def qingchu_ui(self):
qingchu = QPushButton(self)
self.qingchu = qingchu
qingchu.setText("清空")
qingchu.move(415 , 340-105-40)
self.qingchu.clicked.connect(self.qingchu_cao)
def zhuomian_ui(self):
zhuomian = QCheckBox(self)
self.zhuomian = zhuomian
zhuomian.setText("輸出到桌面")
zhuomian.move(20, 345-110-40)
# zhuomian.toggled.connect(lambda isChecked :print(isChecked))
def guanbibaocun():
if self.zhuomian.isChecked() == True:
self.sczdwzan.setChecked(False)
self.sczdwz.setText("")
self.baocunanniu.close()
elif self.zhuomian.isChecked() == False and self.baocunanniu.isChecked() ==True:
self.baocunanniu.show()
zhuomian.clicked.connect(guanbibaocun)
def tishi_ui(self):
tishi = QLabel(self)
self.tishi = tishi
tishi.setText("支持XP,Win7,Win10等打包到桌面")
tishi.setStyleSheet('background-color: rgb(255, 251, 100)')
tishi.move(5, 365-113-40)
def banben_ui(self):
banben = QLabel(self)
self.banben = banben
banben.move(10, 10)
cmd = 'pyinstaller -v'
pivi = subprocess.call(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# print(pivi)
self.bbpi = pivi
if self.bbpi == 0:
banben.setText("您已安裝PyInstaller")
else:
banben.setText("您目前還沒安裝PyInstaller")
banben.setStyleSheet('color:rgb(255, 10, 10)')
def anzhuang_ui(self):
anzhuang = QLabel(self)
self.anzhuang = anzhuang
anzhuang.move(300,10)
if self.bbpi == 0:
anzhuang.setText("")
else:
anzhuang.setText("我要安裝PyInstaller")
def anzhuang_anniu(self):
azan = QPushButton(self)
self.azan = azan
azan.move(415,3)
if self.bbpi == 0:
azan.close()
else:
azan.setText("我要安裝")
azan.clicked.connect(self.anzhuang_cao)
def anzhuang_cao(self):
a = "pip install pyinstaller"
os.system(a)
def xianshi_anniu(self):
xianshi = QCheckBox(self)
self.xianshi = xianshi
xianshi.setText("使用顯式處理")
xianshi.move(20, 265-40)
def tishi2_ui(self):
tishi2 = QLabel(self)
self.tishi2 = tishi2
tishi2.setText("默認(rèn)使用隱式,顯式處理為彈出打包的命令行界面")
tishi2.setStyleSheet('background-color: rgb(255, 251, 100)')
tishi2.move(5, 280-40)
def minglingchuang_ui(self):
minglingchuang = QCheckBox(self)
self.minglingchuang = minglingchuang
minglingchuang.setText("使用命令窗")
minglingchuang.move(20, 255)
def tishi3_ui(self):
tishi3 = QLabel(self)
self.tishi3 = tishi3
tishi3.setText("注意:命令行程序請勾選此選項,否則運行時會提示以下報錯\n failed to execute scipt XXX")
tishi3.setStyleSheet('background-color: rgb(255, 251, 100)')
tishi3.move(5, 280-10)
def wenjian_anniu(self):
wenjiananniu = QPushButton(self)
self.wenjiananniu = wenjiananniu
wenjiananniu.setText("選擇py文件")
wenjiananniu.move(430-10, 30+10)
# wenjiananniu.resize(30,30)
wenjiananniu.adjustSize()
wenjiananniu.clicked.connect(self.dakaiwenjian_cao)
def dakaiwenjian_cao(self):
# dakaiwenjian = QFileDialog.getOpenFileUrl(self)
dakaiwenjian = QFileDialog.getOpenFileName(self, "請選擇一個PY文件", "./", "python文件(*.py)", "python文件(*.py)")
# print(dakaiwenjian)
self.wenjian.setText("file:///"+str(dakaiwenjian[0]))
def ico_anniu(self):
icoanniu = QPushButton(self)
self.icoanniu = icoanniu
icoanniu.setText("選擇ico文件")
icoanniu.move(430 - 10, 30 + 10+50+10)
# wenjiananniu.resize(30,30)
icoanniu.adjustSize()
icoanniu.clicked.connect(self.dakaiico_cao)
def dakaiico_cao(self):
# dakaiwenjian = QFileDialog.getOpenFileUrl(self)
dakaiico = QFileDialog.getOpenFileName(self, "請選擇一個ico文件", "./", "ico文件(*.ico)", "ico文件(*.ico)")
# print(dakaiico)
self.ico.setText("file:///"+str(dakaiico[0]))
def sczdwz_ui(self):
sczdwz = QTextEdit(self)
self.sczdwz = sczdwz
sczdwz.setText("")
sczdwz.move(10 , 170)
sczdwz.resize(480-50-20 , 150-50-50-25)
sczdwz.setReadOnly(True)
def sczdwz_xx(self):
sczdwzan = QCheckBox(self)
self.sczdwzan = sczdwzan
sczdwzan.setText("打包文件輸出到指定位置")
sczdwzan.move(20, 345-110-60-25-10)
def guanbizhuomian():
if sczdwzan.isChecked() == True:
self.zhuomian.setChecked(False)
self.baocunanniu.show()
else:
self.baocunanniu.close()
self.sczdwz.setText("")
sczdwzan.clicked.connect(guanbizhuomian)
def baocun_anniu(self):
baocunanniu = QPushButton(self)
self.baocunanniu = baocunanniu
baocunanniu.setText("選擇保存路徑")
baocunanniu.move(480-50-10 , 345-110-60-5)
# wenjiananniu.resize(30,30)
baocunanniu.adjustSize()
baocunanniu.clicked.connect(self.baocunlujin_cao)
baocunanniu.close()
def sczdwz_tishi(self):
sczdwzts = QLabel(self)
self.sczdwzts = sczdwzts
sczdwzts.setText("打鉤后才會顯示選擇按鈕")
sczdwzts.move(5, 345-110-60-20)
sczdwzts.setStyleSheet('background-color: rgb(255, 251, 100)')
def baocunlujin_cao(self):
baocunlujin = QFileDialog.getExistingDirectory(self)
# print(baocunlujin)
self.sczdwz.setText(baocunlujin)
def anniu_cao(self):
if self.minglingchuang.isChecked() == True:
if self.xianshi.isChecked() == True:
if self.zhuomian.isChecked() == True and self.ico.toPlainText() == "":
i = "pyinstaller -F "
j = self.wenjian.toPlainText()
h = " --distpath=%UserProfile%/Desktop/dist"
self.k = i + j[8:] + h
shuchu = self.k
# print(shuchu)
os.system(shuchu)
elif self.zhuomian.isChecked() == False and self.sczdwzan.isChecked() == False and self.ico.toPlainText() == "":
i = "pyinstaller -F "
j = self.wenjian.toPlainText()
self.k = i + j[8:]
shuchu = self.k
# print(shuchu)
os.system(shuchu)
elif self.zhuomian.isChecked() == True and self.ico.toPlainText() != "":
i = "pyinstaller -F -i "
j = self.wenjian.toPlainText()
h = self.ico.toPlainText()
m = " --distpath=%UserProfile%/Desktop/dist"
self.k = i + h[8:] + " " + j[8:] + m
shuchu = self.k
os.system(shuchu)
# print(shuchu)
elif self.zhuomian.isChecked() == False and self.sczdwzan.isChecked() == False and self.ico.toPlainText() != "":
i = "pyinstaller -F -i "
j = self.wenjian.toPlainText()
h = self.ico.toPlainText()
self.k = i + h[8:] + " " + j[8:]
shuchu = self.k
os.system(shuchu)
# print(shuchu)
#這是一段
elif self.sczdwzan.isChecked() == True and self.ico.toPlainText() == "":
i = "pyinstaller -F "
j = self.wenjian.toPlainText()
h = " --distpath="
s = self.sczdwz.toPlainText()
self.k = i + j[8:] + h + s
shuchu = self.k
# print(shuchu)
os.system(shuchu)
elif self.sczdwzan.isChecked() == True and self.ico.toPlainText() != "":
i = "pyinstaller -F -i "
j = self.wenjian.toPlainText()
h = self.ico.toPlainText()
m = " --distpath="
s = self.sczdwz.toPlainText()
self.k = i + h[8:] + " " + j[8:] + m + s
shuchu = self.k
os.system(shuchu)
# print(shuchu)
else:
pass
else:
if self.zhuomian.isChecked() == True and self.ico.toPlainText() == "":
i = "pyinstaller -F "
j = self.wenjian.toPlainText()
h = " --distpath=%UserProfile%/Desktop/dist"
self.k = i + j[8:] + h
shuchu = self.k
# print(shuchu)
subprocess.call(shuchu, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
elif self.zhuomian.isChecked() == False and self.sczdwzan.isChecked() == False and self.ico.toPlainText() == "":
i = "pyinstaller -F "
j = self.wenjian.toPlainText()
self.k = i + j[8:]
shuchu = self.k
# print(shuchu)
subprocess.call(shuchu, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
elif self.zhuomian.isChecked() == True and self.ico.toPlainText() != "":
i = "pyinstaller -F -i "
j = self.wenjian.toPlainText()
h = self.ico.toPlainText()
m = " --distpath=%UserProfile%/Desktop/dist"
self.k = i + h[8:] + " " + j[8:] + m
shuchu = self.k
# print(shuchu)
subprocess.call(shuchu, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
elif self.zhuomian.isChecked() == False and self.sczdwzan.isChecked() == False and self.ico.toPlainText() != "":
i = "pyinstaller -F -i "
j = self.wenjian.toPlainText()
h = self.ico.toPlainText()
self.k = i + h[8:] + " " + j[8:]
shuchu = self.k
# print(shuchu)
subprocess.call(shuchu, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
#這是第二段
elif self.sczdwzan.isChecked() == True and self.ico.toPlainText() == "":
i = "pyinstaller -F "
j = self.wenjian.toPlainText()
h = " --distpath="
s = self.sczdwz.toPlainText()
self.k = i + j[8:] + h + s
shuchu = self.k
# print(shuchu)
subprocess.call(shuchu, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
elif self.sczdwzan.isChecked() == True and self.ico.toPlainText() != "":
i = "pyinstaller -F -i "
j = self.wenjian.toPlainText()
h = self.ico.toPlainText()
m = " --distpath="
s = self.sczdwz.toPlainText()
self.k = i + h[8:] + " " + j[8:] + m + s
shuchu = self.k
# print(shuchu)
subprocess.call(shuchu, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
else:
pass
else:
if self.xianshi.isChecked() == True:
if self.zhuomian.isChecked() == True and self.ico.toPlainText() == "":
i = "pyinstaller -F -w "
j = self.wenjian.toPlainText()
h = " --distpath=%UserProfile%/Desktop/dist"
self.k = i + j[8:] + h
shuchu = self.k
# print(shuchu)
os.system(shuchu)
elif self.zhuomian.isChecked() == False and self.sczdwzan.isChecked() == False and self.ico.toPlainText() == "":
i = "pyinstaller -F -w "
j = self.wenjian.toPlainText()
self.k = i + j[8:]
shuchu = self.k
# print(shuchu)
os.system(shuchu)
elif self.zhuomian.isChecked() == True and self.ico.toPlainText() != "":
i = "pyinstaller -F -w -i "
j = self.wenjian.toPlainText()
h = self.ico.toPlainText()
m = " --distpath=%UserProfile%/Desktop/dist"
self.k = i + h[8:] + " " + j[8:] + m
shuchu = self.k
os.system(shuchu)
# print(shuchu)
elif self.zhuomian.isChecked() == False and self.sczdwzan.isChecked() == False and self.ico.toPlainText() != "":
i = "pyinstaller -F -w -i "
j = self.wenjian.toPlainText()
h = self.ico.toPlainText()
self.k = i + h[8:] + " " + j[8:]
shuchu = self.k
os.system(shuchu)
# print(shuchu)
elif self.sczdwzan.isChecked() == True and self.ico.toPlainText() == "":
i = "pyinstaller -F -w "
j = self.wenjian.toPlainText()
h = " --distpath="
s = self.sczdwz.toPlainText()
self.k = i + j[8:] + h + s
shuchu = self.k
# print(shuchu)
os.system(shuchu)
elif self.sczdwzan.isChecked() == True and self.ico.toPlainText() != "":
i = "pyinstaller -F -w -i "
j = self.wenjian.toPlainText()
h = self.ico.toPlainText()
m = " --distpath="
s = self.sczdwz.toPlainText()
self.k = i + h[8:] + " " + j[8:] + m + s
shuchu = self.k
os.system(shuchu)
# print(shuchu)
else:
pass
else:
if self.zhuomian.isChecked() == True and self.ico.toPlainText() == "":
i = "pyinstaller -F -w "
j = self.wenjian.toPlainText()
h = " --distpath=%UserProfile%/Desktop/dist"
self.k = i + j[8:] + h
shuchu = self.k
# print(shuchu)
subprocess.call(shuchu, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
elif self.zhuomian.isChecked() == False and self.sczdwzan.isChecked() == False and self.ico.toPlainText() == "":
i = "pyinstaller -F -w "
j = self.wenjian.toPlainText()
self.k = i + j[8:]
shuchu = self.k
# print(shuchu)
subprocess.call(shuchu, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
elif self.zhuomian.isChecked() == True and self.ico.toPlainText() != "":
i = "pyinstaller -F -w -i "
j = self.wenjian.toPlainText()
h = self.ico.toPlainText()
m = " --distpath=%UserProfile%/Desktop/dist"
self.k = i + h[8:] + " " + j[8:] + m
shuchu = self.k
# print(shuchu)
subprocess.call(shuchu, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
elif self.zhuomian.isChecked() == False and self.sczdwzan.isChecked() == False and self.ico.toPlainText() != "":
i = "pyinstaller -F -w -i "
j = self.wenjian.toPlainText()
h = self.ico.toPlainText()
self.k = i + h[8:] + " " + j[8:]
shuchu = self.k
# print(shuchu)
subprocess.call(shuchu, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
elif self.sczdwzan.isChecked() == True and self.ico.toPlainText() == "":
i = "pyinstaller -F -w "
j = self.wenjian.toPlainText()
h = " --distpath="
s = self.sczdwz.toPlainText()
self.k = i + j[8:] + h + s
shuchu = self.k
# print(shuchu)
subprocess.call(shuchu, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
elif self.sczdwzan.isChecked() == True and self.ico.toPlainText() != "":
i = "pyinstaller -F -w -i "
j = self.wenjian.toPlainText()
h = self.ico.toPlainText()
m = " --distpath="
s = self.sczdwz.toPlainText()
self.k = i + h[8:] + " " + j[8:] + m + s
shuchu = self.k
# print(shuchu)
subprocess.call(shuchu, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
else:
pass
def qingchu_cao(self):
self.wenjian.clear()
self.ico.clear()
self.sczdwz.clear()
if __name__ == "__main__":
app = QApplication(sys.argv)
window = WinDow()
window.show()
sys.exit(app.exec())
到此這篇關(guān)于Python pyinstaller實現(xiàn)圖形化打包工具的文章就介紹到這了,更多相關(guān)Python pyinstaller打包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python結(jié)合多線程爬取英雄聯(lián)盟皮膚(原理分析)
多線程是為了同步完成多項任務(wù),不是為了提高運行效率,而是為了提高資源使用效率來提高系統(tǒng)的效率。這篇文章主要介紹了python爬取英雄聯(lián)盟皮膚結(jié)合多線程的方法,需要的朋友可以參考下2021-05-05
Python 2種方法求某個范圍內(nèi)的所有素數(shù)(質(zhì)數(shù))
這篇文章主要介紹了Python 2種方法求某個范圍內(nèi)的所有素數(shù)(質(zhì)數(shù)),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
將字典轉(zhuǎn)換為DataFrame并進行頻次統(tǒng)計的方法
下面小編就為大家分享一篇將字典轉(zhuǎn)換為DataFrame并進行頻次統(tǒng)計的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04

