#python #python-3.x #tkinter #pyinstaller #exe
#python #python-3.x #tkinter #pyinstaller #exe
Вопрос:
Я новичок в Tkinter, и я написал очень простой код Tkinter, который получает два ввода от пользователя, а затем выполняет другой скрипт python с использованием os.system с передачей двух входных данных в качестве аргументов. Код в основном обнаруживает разницу в файле CSV.
Совместное использование кода Tkinter ниже.
import tkinter as tk
import os
def csv_diff():
global first
first = e1.get().replace('\','\\')
second = e2.get().replace('\','\\')
execute = 'python' ' ' 'File_diff.py' ' ' first ' ' second
os.system(execute)
root = tk.Tk()
root.geometry("400x200")
root.configure(bg='green')
window = tk.Label(root,bg = "yellow", text="File Difference").grid(row=0)
tk.Label(root, text="1st CSV Location").grid(row=1)
tk.Label(root, text="2nd CSV Location").grid(row=2)
e1 = tk.Entry(root)
e2 = tk.Entry(root)
e1.grid(row=1, column=1)
e2.grid(row=2, column=1)
slogan = tk.Button(root,text="Run",command=csv_diff).grid(row=3, column=1, sticky=tk.W,pady=4)
root.mainloop()
Второй код File_diff.py является
import sys
first_file_path = sys.argv[1]
second_file_path = sys.argv[2]
with open(first_file_path, 'r') as t1, open(second_file_path, 'r') as t2:
fileone = t1.readlines()
filetwo = t2.readlines()
with open('update.csv', 'a') as outFile:
outFile.write(fileone[0])
with open('update.csv', 'a') as outFile:
for line in filetwo:
if line not in fileone:
outFile.write(line)
with open('update.csv', 'a') as outFile:
for line in fileone:
if line not in filetwo:
outFile.write(line)
Теперь я хочу создать один исполняемый файл для этих программ.
Я попытался использовать pyinstaller, но затем он показал ошибку, что нет файла File_diff.py не существует.
Я не могу понять, как создать один exe-файл для этих двух кодов. Кто-нибудь может объяснить, как создать для этого один исполняемый файл?
Ответ №1:
Вам необходимо включить File_diff.py
в сгенерированный исполняемый файл:
pyinstaller -F --add-data File_diff.py;. my_script.py
Поскольку все файлы, упакованные в сгенерированный исполняемый файл, будут извлечены во временный каталог при запуске исполняемого файла, вашему коду необходимо получить временный каталог, чтобы получить доступ к этим файлам:
import os
import sys
...
# function to get the path of a resource
def get_resource(resource):
resource_path = getattr(sys, "_MEIPASS", "")
return os.path.join(resource_path, resource)
Затем вы можете выполнить внешний скрипт, как показано ниже:
def csv_diff():
first = e1.get().replace('\','\\')
second = e2.get().replace('\','\\')
execute = ' '.join(['python', get_resource('File_diff.py'), first, second])
os.system(execute)
Комментарии:
1. Спасибо @acw168. Узнал кое-что новое, особенно функцию get_resource.