Как обернуть код на питонее в доступную оболчку

Всем привет, у меня есть написаный на питоне код о сравнении 2х файлов эксель, теперь мне нужно сделать его доступным для человека, не умеющего работать с JupyterNotebook. Хотелось бы отделаться малой кровью и сделать это наиболее простым образом(без написания фронтенда в привычном образе). Кто-то может подсказать план действий?

От пользователя требуется только загрузить файлы эксель и на выходе нужно получить файл эксель со сравнением. Пока что есть одна идея сделать это с помощью flask. Но я не уверена, что это наилучший путь.


Ответы (3 шт):

Автор решения: Рустам Нафиков

Ну если человеку код нужен просто в пользование, то я бы просто все обернул в функции, которые потом достаточно было бы вызвать с нужными входными данными. Если же ему нужно дальше развивать, то проще уж ему будет вкурить в Jupiter, не так он и сложен. Нельзя же сделать понятной программу, если человек не понимает ее основного инструмента.

→ Ссылка
Автор решения: vadim vaduxa

мне кажется проще сделать через cgi, примерно так, тремя файлами

test_dir/start_http_server.py - запуск http сервера

import http.server
httpd = http.server.ThreadingHTTPServer(('192.168.1.1', 80), http.server.CGIHTTPRequestHandler)
httpd.serve_forever()  # http://192.168.1.1:80

test_dir/cgi-bin/index.html - стартовая страница, с формой загрузки файлов

<!DOCTYPE html>
<html>
<form enctype="multipart/form-data" action="upload_file.py" method="post">
    <p>File: <input type="upload_file" name="upload_file"></p>
    <p><input type="submit" value="upload_file"></p>
</form>
</html>

test_dir/cgi-bin/upload_file.py - сравнение файлов и выгрузка файла клиенту, запускается кнопкой субмит на стартовой странице

import cgi

def main(file_path):
    """код о сравнении 2х файлов эксел"""
    result_file_link = '...'
    return result_file_link

if __name__ == '__main__':
    # получение исходного файла
    form = cgi.FieldStorage()
    file_1 = form['upload_file']
    # получение файла результата
    result_file_link = main(file_1.filename)
    # передача файла результата, то что выведет print, попадет клиенту в браузер
    print(f'''
        Content-Type: application/octet-stream; name="{result_file_link}"
        Content-Disposition: attachment; filename="{result_file_link}"
        Content-Length: " + {os.stat(result_file_link).st_size}
        
            {open(result_file_link, 'rb').read()}
    ''')
→ Ссылка
Автор решения: Stanislav Volodarskiy

Если вы можете установить Питон на компьютер пользователя, то этот скрипт попросит пользователя выбрать три файла и выполнит работу над ними. В данном случае он склеивает первые два файла и записывает их в третий:

import tkinter.filedialog


def process(filename_1, filename_2, filename_3):
    with open(filename_3, 'w') as f3:
        with open(filename_1) as f1:
            for line in f1:
                print(line, end='', file=f3)
        with open(filename_2) as f2:
            for line in f2:
                print(line, end='', file=f3)


def main():

    filename_1 = tkinter.filedialog.askopenfilename(title='Select first file')
    if not isinstance(filename_1, str):
        return

    filename_2 = tkinter.filedialog.askopenfilename(title='Select second file')
    if not isinstance(filename_2, str):
        return

    filename_3 = tkinter.filedialog.asksaveasfilename(title='Select file for result')
    if not isinstance(filename_3, str):
        return

    process(filename_1, filename_2, filename_3)


main()
→ Ссылка