Kürzlich habe ich einige Artikel über das visuelle Paketierungstool Auto-py-to-exe gelesen, das von einigen großen Leuten gepostet wurde und auf Pyinstaller basiert , aber im Vergleich zu Pyinstaller verfügt es über mehr GUI-Schnittstellen. Ich habe es auch selbst ausprobiert und fand es wirklich nützlich und praktisch. Sie können das Programm mit nur wenigen Klicks packen.
Aber ich habe festgestellt, dass weder Auto-py-to-exe noch pyinstaller mehrere Programme gleichzeitig packen können. Wenn Sie mehrere Programme packen möchten, müssen Sie dies erneut tun, also für einen Programmierer , das ist eine unerträgliche Sache. Auf dieser Grundlage habe ich ein kleines Batch-Paketprogramm geschrieben, das auf Pyinstaller basiert.
Das Pyinstaller-Paketprogramm muss den Befehl cmd verwenden. Hier finden Sie eine kurze Einführung in die gängigen Methoden zum Aufrufen des Befehls cmd.
system() ist eine im OS-Modul integrierte Funktion, die Strings in Befehle umwandeln und im Terminal ausführen kann:
def system(*args, **kwargs): # real signature unknown """ Execute the command in a subshell. """ pass
import os os.system(f'pyinstaller -F -w D:程序.py')
def popen(cmd, mode="r", buffering=-1): if not isinstance(cmd, str): raise TypeError("invalid cmd type (%s, expected string)" % type(cmd)) if mode not in ("r", "w"): raise ValueError("invalid mode %r" % mode) if buffering == 0 or buffering is None: raise ValueError("popen() does not support unbuffered streams") import subprocess, io if mode == "r": proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, bufsize=buffering) return _wrap_close(io.TextIOWrapper(proc.stdout), proc) else: proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, bufsize=buffering) return _wrap_close(io.TextIOWrapper(proc.stdin), proc)
Bei der Verwendung müssen nur die erforderlichen Parameter übergeben und durch Lesen ausgeführt werden oder schreiben: #🎜 🎜#
os.popen(f'pyinstaller -F -w D:程序.py').read()
subprocess.run(f'pyinstaller -F -w D:程序.py')
import os import PySimpleGUI as sg
pip intsall 库名
Da es keine besonderen Anforderungen an die Funktion gibt, muss sie nur in der Lage sein, mehrere Programme mit nur einem Vorgang zu packen. Der endgültige Designcode lautet wie folgt: #🎜 🎜#
# 主题设置 sg.theme('LightBrown3') # 布局设置 layout = [ [sg.Frame(layout=[ [ sg.InputText(key='please_select_file', size=(24, 1), font=("微软雅黑", 10), enable_events=True), # FileBrowse 只能选择单个文件 FilesBrowse加入s可以选择多个文件 sg.FilesBrowse('获取文件', file_types=(("Text Files", "*.py"),), font=("微软雅黑", 10)), ], ], title='选择文件', title_color='blue', font=("微软雅黑", 10), relief=sg.RELIEF_SUNKEN, )], [sg.Button('开始打包', font=("微软雅黑", 10)), sg.Text('', font=("微软雅黑", 10), size=(16, 0)), sg.Button('退出程序', font=("微软雅黑", 10), button_color='red')]# button_color blue red ] # 创建窗口 window = sg.Window('打包工具', layout, font=("微软雅黑", 12), default_element_size=(30, 1))
# 🎜🎜#Der über die Schnittstelle erhaltene Dateipfad wird durch ein „;“ getrennt, er muss später aufgeteilt werden:
valuelist = [] # 事件循环 while True: # 退出按钮 event, values = window.read() if event in (None, '退出程序'): break # 打开文件按钮 if event == 'please_select_file': fileName = values['please_select_file'] # 得到的文件路径是以 “;”相分隔的,传入列表 valuelist.append(fileName) if event == '开始打包': if len(valuelist) != 0: # 传入打包函数 pyinstaller_(valuelist) else: sg.popup('文件未选择!')
def pyinstaller_(valuelist): for i in valuelist: a = i.split(';') for x in a: os.system(f'pyinstaller -F -w {x}')
Ergebnis. exe-Datei
Vor- und Nachteile von Gadgets:# 🎜🎜#
Vorteile: Die Wirkung des Gadgets ist für Menschen mit anderen Bedürfnissen nicht sehr nützlich, aber dennoch nützlich Für Leute, die mehrere Programme verpacken müssen, müssen sie sich schließlich weigern.
Nachteile: Die Mängel des Gadgets liegen auf der Hand. Es kann nicht mit gepackten Programmsymbolen usw. arbeiten, und bei der Ausführung von Befehlen kann es nur einzeln ausgeführt werden, was die Effizienz erheblich verringert und erfordert Koordination von Threads und Prozessen.Zu diesem Zeitpunkt haben wir Python erfolgreich eingesetzt, um die Notwendigkeit der Stapelpaketierung von Programmen zu lösen und unsere Hände frei zu machen.
Das obige ist der detaillierte Inhalt vonEin Tool zum Implementieren von Batch-Packaging-Programmen mit Python~. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!