Cleanup of EXE Maker. Biggest potential impact is the --clean flag when calling pyinstaller
This commit is contained in:
parent
1c74af8d5d
commit
cb38f818e1
|
@ -1,14 +1,13 @@
|
|||
import PySimpleGUI as sg
|
||||
import subprocess
|
||||
from shutil import copyfile
|
||||
import shutil
|
||||
import os
|
||||
|
||||
import sys
|
||||
'''
|
||||
Make a "Windows os" executable with PyInstaller
|
||||
'''
|
||||
|
||||
def Launcher():
|
||||
def main():
|
||||
sg.theme('LightGreen')
|
||||
|
||||
layout = [[sg.Text('PyInstaller EXE Creator', font='Any 15')],
|
||||
|
@ -18,16 +17,11 @@ def Launcher():
|
|||
sg.FileBrowse(file_types=(("Icon Files", "*.ico"),))],
|
||||
[sg.Frame('Output', font='Any 15', layout=[
|
||||
[sg.Output(size=(65, 15), font='Courier 10')]])],
|
||||
[sg.ReadFormButton('Make EXE', bind_return_key=True),
|
||||
sg.SimpleButton('Quit', button_color=('white', 'firebrick3')), ]]
|
||||
|
||||
window = sg.Window('PySimpleGUI EXE Maker',
|
||||
layout,
|
||||
auto_size_text=False,
|
||||
auto_size_buttons=False,
|
||||
default_element_size=(20, 1,),
|
||||
text_justification='right')
|
||||
[sg.Button('Make EXE', bind_return_key=True),
|
||||
sg.Button('Quit', button_color=('white', 'firebrick3')) ],
|
||||
[sg.Text('Made with PySimpleGUI (www.PySimpleGUI.org)', auto_size_text=True, font='Courier 8')]]
|
||||
|
||||
window = sg.Window('PySimpleGUI EXE Maker', layout, auto_size_text=False, auto_size_buttons=False, default_element_size=(20,1), text_justification='right')
|
||||
# ---===--- Loop taking in user input --- #
|
||||
while True:
|
||||
|
||||
|
@ -44,39 +38,47 @@ def Launcher():
|
|||
dispath_option = '--distpath "{}"'.format(source_path)
|
||||
specpath_option = '--specpath "{}"'.format(source_path)
|
||||
folder_to_remove = os.path.join(source_path, source_filename[:-3])
|
||||
file_to_remove = os.path.join(
|
||||
source_path, source_filename[:-3]+'.spec')
|
||||
command_line = 'pyinstaller -wF --clean "{}" {} {} {} {}'.format(
|
||||
source_file, icon_option, workpath_option, dispath_option, specpath_option)
|
||||
file_to_remove = os.path.join(source_path, source_filename[:-3]+'.spec')
|
||||
command_line = 'pyinstaller -wF --clean "{}" {} {} {} {}'.format(source_file, icon_option, workpath_option, dispath_option, specpath_option)
|
||||
|
||||
if event == 'Make EXE':
|
||||
try:
|
||||
print(command_line)
|
||||
print(
|
||||
'Making EXE...the program has NOT locked up...')
|
||||
print('Making EXE...the program has NOT locked up...')
|
||||
window.refresh()
|
||||
# print('Running command {}'.format(command_line))
|
||||
runCommand(command_line)
|
||||
out, err = runCommand(command_line, window=window)
|
||||
shutil.rmtree(folder_to_remove)
|
||||
os.remove(file_to_remove)
|
||||
print('**** DONE ****')
|
||||
except:
|
||||
sg.popup_error('Something went wrong')
|
||||
sg.PopupError('Something went wrong', 'close this window and copy command line from text printed out in main window','Here is the output from the run', out)
|
||||
print('Copy and paste this line into the command prompt to manually run PyInstaller:\n\n', command_line)
|
||||
|
||||
|
||||
def runCommand(cmd, timeout=None):
|
||||
"""
|
||||
run shell command
|
||||
def runCommand(cmd, timeout=None, window=None):
|
||||
""" run shell command
|
||||
|
||||
@param cmd: command to execute
|
||||
@param timeout: timeout for command execution
|
||||
|
||||
@return: (return code from command, command output)
|
||||
"""
|
||||
|
||||
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
out, err = p.communicate()
|
||||
p.wait(timeout)
|
||||
return (out, err)
|
||||
output = ''
|
||||
for line in p.stdout:
|
||||
line = line.decode(errors='replace' if (sys.version_info) < (3, 5)
|
||||
else 'backslashreplace').rstrip()
|
||||
output += line
|
||||
print(line)
|
||||
if window:
|
||||
window.Refresh()
|
||||
|
||||
retval = p.wait(timeout)
|
||||
|
||||
return (retval, output)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
Launcher()
|
||||
main()
|
||||
|
|
|
@ -1,53 +1,53 @@
|
|||
import PySimpleGUI as sg
|
||||
import subprocess
|
||||
from shutil import copyfile
|
||||
import shutil
|
||||
import os
|
||||
import sys
|
||||
'''
|
||||
Make a "Windows os" executable with PyInstaller
|
||||
'''
|
||||
|
||||
def Launcher():
|
||||
sg.ChangeLookAndFeel('LightGreen')
|
||||
def main():
|
||||
sg.theme('LightGreen')
|
||||
|
||||
layout = [[sg.T('PyInstaller EXE Creator', font='Any 15')],
|
||||
[sg.T('Source Python File'), sg.In(key='_sourcefile_', size=(45,1)), sg.FileBrowse(file_types=(("Python Files", "*.py"),))],
|
||||
[sg.T('Icon File'), sg.In(key='_iconfile_', size=(45,1)), sg.FileBrowse(file_types=(("Icon Files", "*.ico"),))],
|
||||
[sg.Frame('Output', font='Any 15',layout= [[sg.Output(size=(85, 15), font='Courier 10')]])],
|
||||
[sg.ReadFormButton('Make EXE',bind_return_key=True),
|
||||
sg.SimpleButton('Quit', button_color=('white','firebrick3')),]]
|
||||
|
||||
window = sg.Window('PySimpleGUI EXE Maker',
|
||||
auto_size_text=False,
|
||||
auto_size_buttons=False,
|
||||
default_element_size=(20,1),
|
||||
text_justification='right')
|
||||
|
||||
window.Layout(layout)
|
||||
layout = [[sg.Text('PyInstaller EXE Creator', font='Any 15')],
|
||||
[sg.Text('Source Python File'), sg.Input(key='-sourcefile-', size=(45, 1)),
|
||||
sg.FileBrowse(file_types=(("Python Files", "*.py"),))],
|
||||
[sg.Text('Icon File'), sg.Input(key='-iconfile-', size=(45, 1)),
|
||||
sg.FileBrowse(file_types=(("Icon Files", "*.ico"),))],
|
||||
[sg.Frame('Output', font='Any 15', layout=[
|
||||
[sg.Output(size=(65, 15), font='Courier 10')]])],
|
||||
[sg.Button('Make EXE', bind_return_key=True),
|
||||
sg.Button('Quit', button_color=('white', 'firebrick3')) ],
|
||||
[sg.Text('Made with PySimpleGUI (www.PySimpleGUI.org)', auto_size_text=True, font='Courier 8')]]
|
||||
|
||||
window = sg.Window('PySimpleGUI EXE Maker', layout, auto_size_text=False, auto_size_buttons=False, default_element_size=(20,1), text_justification='right')
|
||||
# ---===--- Loop taking in user input --- #
|
||||
while True:
|
||||
(button, values) = window.Read()
|
||||
if button in ('Quit', None):
|
||||
break # exit button clicked
|
||||
|
||||
source_file = values['_sourcefile_']
|
||||
icon_file = values['_iconfile_']
|
||||
event, values = window.read()
|
||||
if event in ('Exit', 'Quit', None):
|
||||
break
|
||||
|
||||
source_file = values['-sourcefile-']
|
||||
icon_file = values['-iconfile-']
|
||||
|
||||
icon_option = '-i "{}"'.format(icon_file) if icon_file else ''
|
||||
source_path, source_filename = os.path.split(source_file)
|
||||
workpath_option = '--workpath "{}"'.format(source_path)
|
||||
dispath_option = '--distpath "{}"'.format(source_path)
|
||||
specpath_option = '--specpath "{}"'.format(source_path)
|
||||
folder_to_remove = os.path.join(source_path,source_filename[:-3])
|
||||
folder_to_remove = os.path.join(source_path, source_filename[:-3])
|
||||
file_to_remove = os.path.join(source_path, source_filename[:-3]+'.spec')
|
||||
command_line = 'pyinstaller -wF "{}" {} {} {} {}'.format(source_file, icon_option, workpath_option, dispath_option, specpath_option)
|
||||
command_line = 'pyinstaller -wF --clean "{}" {} {} {} {}'.format(source_file, icon_option, workpath_option, dispath_option, specpath_option)
|
||||
|
||||
if button == 'Make EXE':
|
||||
out=''
|
||||
if event == 'Make EXE':
|
||||
try:
|
||||
print(command_line)
|
||||
print('Making EXE... this will take a while.. the program has NOT locked up...')
|
||||
window.Refresh()
|
||||
print('Making EXE...the program has NOT locked up...')
|
||||
window.refresh()
|
||||
# print('Running command {}'.format(command_line))
|
||||
out, err = runCommand(command_line)
|
||||
out, err = runCommand(command_line, window=window)
|
||||
shutil.rmtree(folder_to_remove)
|
||||
os.remove(file_to_remove)
|
||||
print('**** DONE ****')
|
||||
|
@ -56,7 +56,7 @@ def Launcher():
|
|||
print('Copy and paste this line into the command prompt to manually run PyInstaller:\n\n', command_line)
|
||||
|
||||
|
||||
def runCommand(cmd, timeout=None):
|
||||
def runCommand(cmd, timeout=None, window=None):
|
||||
""" run shell command
|
||||
|
||||
@param cmd: command to execute
|
||||
|
@ -64,14 +64,21 @@ def runCommand(cmd, timeout=None):
|
|||
|
||||
@return: (return code from command, command output)
|
||||
"""
|
||||
|
||||
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
output = ''
|
||||
for line in p.stdout:
|
||||
line = line.decode(errors='replace' if (sys.version_info) < (3, 5)
|
||||
else 'backslashreplace').rstrip()
|
||||
output += line
|
||||
print(line)
|
||||
if window:
|
||||
window.Refresh()
|
||||
|
||||
out, err = p.communicate()
|
||||
p.wait(timeout)
|
||||
retval = p.wait(timeout)
|
||||
|
||||
return (retval, output)
|
||||
|
||||
return (out, err)
|
||||
|
||||
if __name__ == '__main__':
|
||||
Launcher()
|
||||
|
||||
main()
|
||||
|
|
Loading…
Reference in New Issue