Python 程序无法在可执行文件中运行 - 归档、sqlite3、tkinter
Python programme not working in executable file - archiving,sqlite3, tkinter
我刚刚完成了我的第一个 Python 程序,它基本上归档了用户指定的文件。有一个用 tkinter 和 sqlite3 制作的 GUI。最后我让它在 Python 中正常工作。然后我使用 pyinstaller 把它变成了一个 .exe 文件,关键组件(归档)就没有发生。
在 Archive() 函数中,我创建了弹出窗口 windows 来向我显示路径,它们看起来都很好,所以线程正在工作,但实际的归档没有发生。这是一小部分代码,我认为是错误的地方。
def Archiver(input_file, output_dir, archive_int):
while True:
global sched_var
time.sleep(archive_int*60)
input_name = os.path.basename(input_file)
main_dir = os.path.dirname(input_file)
if not os.path.exists(main_dir + '/temp'):
os.mkdir(main_dir + '/temp')
## copy file to temporary directory
shutil.copy(input_file, os.path.join(main_dir, 'temp'))
## hold all the paths in variables to check they are okay
tempfiledir = os.path.join(main_dir + '/temp/' + input_name)
archfile = input_file + "_" + time.strftime("%H%M_%d%m%Y")+'.rar'
outputarch = output_dir + '/' + input_name + "_" + time.strftime("%H%M_%d%m%Y")+'.rar'
messagebox.showinfo(title = 'tempfiledir', message = tempfiledir) ## all these seem okay
messagebox.showinfo(title = 'archfile', message = archfile)
messagebox.showinfo(title = 'outputarch', message = outputarch)
patoolib.create_archive(archfile,(tempfiledir,),) ## from here - nothing executed
messagebox.showinfo(title = 'Archive', message = 'Archive created')
shutil.move(archfile, outputarch)
messagebox.showinfo(title = 'Moved', message = 'Archive moved')
if sched_var == False:
break
正如我所说,当 Python 中的 运行 时它工作完美,如果文件是 .exe 文件,os.path 有什么不同吗?
是的,基本上可执行文件被提取到一个临时目录,然后在那里运行。该目录的路径保存在名为 _MEIPASS
的系统变量中。您可以查看 here 以了解如何检索该路径并使用临时文件夹位置创建绝对路径。
我刚刚完成了我的第一个 Python 程序,它基本上归档了用户指定的文件。有一个用 tkinter 和 sqlite3 制作的 GUI。最后我让它在 Python 中正常工作。然后我使用 pyinstaller 把它变成了一个 .exe 文件,关键组件(归档)就没有发生。
在 Archive() 函数中,我创建了弹出窗口 windows 来向我显示路径,它们看起来都很好,所以线程正在工作,但实际的归档没有发生。这是一小部分代码,我认为是错误的地方。
def Archiver(input_file, output_dir, archive_int):
while True:
global sched_var
time.sleep(archive_int*60)
input_name = os.path.basename(input_file)
main_dir = os.path.dirname(input_file)
if not os.path.exists(main_dir + '/temp'):
os.mkdir(main_dir + '/temp')
## copy file to temporary directory
shutil.copy(input_file, os.path.join(main_dir, 'temp'))
## hold all the paths in variables to check they are okay
tempfiledir = os.path.join(main_dir + '/temp/' + input_name)
archfile = input_file + "_" + time.strftime("%H%M_%d%m%Y")+'.rar'
outputarch = output_dir + '/' + input_name + "_" + time.strftime("%H%M_%d%m%Y")+'.rar'
messagebox.showinfo(title = 'tempfiledir', message = tempfiledir) ## all these seem okay
messagebox.showinfo(title = 'archfile', message = archfile)
messagebox.showinfo(title = 'outputarch', message = outputarch)
patoolib.create_archive(archfile,(tempfiledir,),) ## from here - nothing executed
messagebox.showinfo(title = 'Archive', message = 'Archive created')
shutil.move(archfile, outputarch)
messagebox.showinfo(title = 'Moved', message = 'Archive moved')
if sched_var == False:
break
正如我所说,当 Python 中的 运行 时它工作完美,如果文件是 .exe 文件,os.path 有什么不同吗?
是的,基本上可执行文件被提取到一个临时目录,然后在那里运行。该目录的路径保存在名为 _MEIPASS
的系统变量中。您可以查看 here 以了解如何检索该路径并使用临时文件夹位置创建绝对路径。