Baru-baru ini saya membaca beberapa artikel tentang alat pembungkusan visual auto-py-to-exe yang disiarkan oleh beberapa orang besar Auto-py-to-exe adalah berdasarkan pyinstaller, tetapi dibandingkan dengan pyinstaller, Ia mempunyai antara muka GUI. Saya juga mencubanya sendiri dan mendapati ia sangat berguna dan mudah Anda boleh membungkus program dengan hanya beberapa klik.
Tetapi saya mendapati bahawa auto-py-to-exe mahupun pyinstaller tidak boleh membungkus secara langsung berbilang program pada satu masa Jika anda ingin membungkus berbilang program, anda perlu melakukannya sekali lagi, jadi untuk pengaturcara, ini adalah perkara yang tidak boleh diterima. Berdasarkan ini, saya menulis program pembungkusan kelompok kecil berdasarkan pyinstaller.
Atur cara pembungkusan pyinstaller perlu menggunakan arahan cmd Berikut ialah pengenalan ringkas kepada kaedah biasa memanggil arahan cmd.
system() ialah fungsi yang dibina ke dalam modul os, yang boleh menukar rentetan kepada arahan dan melaksanakannya dalam terminal:
def system(*args, **kwargs): # real signature unknown """ Execute the command in a subshell. """ pass
Gunakan kaedah ini Sangat mudah Anda hanya perlu meletakkan arahan untuk dilaksanakan ke dalam fungsi dalam bentuk rentetan:
import os os.system(f'pyinstaller -F -w D:程序.py')
Apabila melaksanakan arahan, tetingkap cmd tidak akan muncul akan dipaparkan dalam IDE secara lalai. Fail yang dihasilkan akan berada dalam Dalam direktori yang sama:
kaedah popen() juga merupakan fungsi terbina dalam modul os, yang dilaksanakan melalui saluran paip dan mengembalikan nilai Merupakan objek fail yang boleh dibaca dan ditulis. Lalai kepada bacaan 'r'. Kandungan output boleh dibaca dengan memanggil kaedah read() atau readlines() bagi objek Berikut ialah kod sumber:
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)
Penggunaan hanya perlu memasukkan parameter yang diperlukan dan laksanakan dengan membaca. atau menulis:
os.popen(f'pyinstaller -F -w D:程序.py').read()
Hasil pelaksanaan adalah sama seperti os.system(), dan fail yang dijana berada dalam direktori yang sama.
Modul subprocess digunakan secara rasmi untuk menggantikan beberapa kaedah modul lama Ia mengandungi banyak kaedah kandungan dan lebih maju daripada os.system() dan os.popen(. ). Untuk menambah baik beberapa. Modul subproses mempunyai pelbagai kaedah untuk memanggil arahan cmd, iaitu Popen, call, run, dan getstatusoutput Di sini kami hanya menerangkan secara ringkas kaedah run().
Fungsi subprocess.run() melaksanakan perintah yang ditentukan, menunggu arahan untuk dilaksanakan dan mengembalikan contoh kelas CompletedProcess yang mengandungi hasil pelaksanaan.
Penggunaan adalah sama dengan kaedah os.system() dan os.popen(), menghantar perintah rentetan, tetapi pemilihan parameter adalah lebih daripada os.system() dan os.popen():
subprocess.run(f'pyinstaller -F -w D:程序.py')
Kaedah ini tidak mengembalikan output secara lalai, hanya perintah dan status pelaksanaan.
Kami telah mengetahui cara berbilang atur cara memanggil arahan cmd Artikel ini menggunakan kaedah penggunaannya sangat mudah. anda boleh Buat kajian mendalam.
Pustaka yang digunakan untuk membina GUI ialah PySimpleGUI:
import os import PySimpleGUI as sg
Jika ia belum dipasang lagi, anda boleh menggunakan arahan pip untuk memasangnya:
pip intsall 库名
Oleh kerana tiada keperluan khas untuk fungsi tersebut, ia hanya perlu membungkus berbilang program dengan hanya satu operasi Kod reka bentuk akhir adalah seperti berikut:
# 主题设置 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))
Antara muka adalah seperti berikut:
Antara muka widget
Laluan fail yang diperoleh melalui antara muka dipisahkan oleh " ;", dan perlu dibahagikan kemudian:
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('文件未选择!')
Fungsi menerima senarai, yang perlu dibaca melalui gelung; laluan yang dibahagikan dengan pemisahan akan menghasilkan senarai, yang masih perlu dibaca melalui gelung; Perbandingan kesan pembungkusan program Tunggal, -F dan -w masing-masing menghasilkan satu fail boleh laku dan membatalkan paparan tetingkap baris arahan:
def pyinstaller_(valuelist): for i in valuelist: a = i.split(';') for x in a: os.system(f'pyinstaller -F -w {x}')
fail boleh laku .exe yang dijana akhir disimpan dalam fail dist:
Fail .exe hasil
Kebaikan dan keburukan alat:
Pada ketika ini, kami telah berjaya menggunakan Python untuk menyelesaikan keperluan untuk pembungkusan kelompok program dan membebaskan tangan kami.
Atas ialah kandungan terperinci Alat untuk melaksanakan program pembungkusan kelompok menggunakan Python~. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!