Создание одного exe-файла кода python, который выполняет другой код python

#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.