Как стать автором
Обновить

Комментарии 9

НЛО прилетело и опубликовало эту надпись здесь
Это больше похоже на обычное десктопное приложение, где пользователь выполняет роль и клиента и сервера (но при этом полноценно используется html, css и js для графики, а не фреймворки). Но главный плюс такого подхода, что вы можете легко отделить графическую часть от логики приложения. То есть, вы можете написать приложением таким образом, как в статье, но при желании затем разъединить логику python кода от html, css, js, тогда у вас получится полноценное веб-приложение. И по итогу вам не надо будет мучаться, чтобы переписывать код клиента или сервера, так как можно будет заменить вызов функций, обернутых @eel.expose на вызов API.
Интересно, по сути это получается веб-приложение, но без веб-сервера?

Eel запускает локальный веб-сервер (по умолчанию на localhost:8000) и открывает Chrome с флагом --app, позволяющий задавать размер окна и чтобы это выглядело как обычное приложение. А потом через свой же веб-сервер позволяет функциям из javascript обмениваться данными с функциями на python. И наоборот. Внутри это все сделано на вебсокетах. Из-за этого есть минус, что все такие функции асинхронные. Впрочем, в javascript это можно обойти через await, а на питоне еще проще.


Самое интересное, что в качестве браузера можно использовать не только Chrome, но и встроенный в Windows 10 Edge, а всю программу с помощью PyInstaller запаковать в один .exe. В итоге получается автономная программа, которая будет работать на любом Windows 10, не требуя установленного Python.


Подробное и довольно понятное описание, как это все работает, есть на страничке этой библиотеки: https://github.com/ChrisKnott/Eel

НЛО прилетело и опубликовало эту надпись здесь

Да, похоже. Таких гибридов "javascript + что-то для доступа к системе" уже полно) HTA, Electron, NW.js (бывший Node-Webkit). Даже для питона, помимо EEL, есть CEF Python.


Для тех кто не понял, зачем это нужно, поясню. С помощью таких инструментов из браузерного javascript можно вызывать функции python для доступа к дискам и остальным функциям системы. В Electron и NW это сделано с помощью Node.js. Там это органично переплелось, потому что оба работают на javascript. Что и обеспечило такой связке большую популярность. Браузер для отображения интерфейса, а Node.js для всего остального, что недоступно из браузерного javascript. Доступ к файлам и т.д.


К преимуществам EEL можно отнести то, что не только из браузерного javascript можно вызывать сложные расчеты на питоне (numpy, scipy, нейронные сети на Tensorflow/Pytorch), но и из питона можно вызывать браузерные функции. Что позволяет из питона использовать браузер для визуализации данных крутыми javascript библиотеками, вроде D3.js, Three.js.


Ну а недостаток, что для каждой функции, которую хотите вызвать из другого языка (из python в javascript или наоборот), надо создавать шаблон, как описано в документации к EEL.

Самым большим плюсом, почему я вообще посмотрел в сторону именно EEL, я бы выделил то, что есть возможность легко разделить логику приложения от графической оболочки. То есть я пишу back на python, так как это мой основной язык, и мне не очень хочется лезть в JS, а другой человек делает всю верстку и логику графической части приложения. И задачи, которые решал python, можно было легко решить при помощи уже готовых библиотек, вместо того, чтобы переписывать эти библиотеки на другой язык.
А так да, конечно, можно использовать другие связки, которые вы описали выше, но они не всегда подходят для конкретных задач.

Здравствуйте, статья интересная, о этой либе знал давно, но все же. Я пытался ее упаковать в exe, и постоянно на сторонних ПК вылетала ошибка модулей. Можно где-нибудь отрыть гайд как нормально создать exeшник?

Создать exe довольно просто
Для этого я просто создал отдельный файл в проекте (назвал его my_setup.py)
И поместил туда следующий код:
import os
name_proj = "test_eel"
noconsole = "" # ставим "" - если нужна консоль, " --windowed " - если не нужна 
onefile = " --onefile " # указываем, что exe должен быть упакован в один файл
if __name__ == "__main__":
    cmd_txt = f'python -m eel main.py front {onefile} {noconsole} --name {name_proj}'
    os.system(cmd_txt)

По итогу у вас должна создаться папка dist с .exe файлом, его можно запускать (тестил только на вин 10)
см. так же тут
А вообще я запускал программу на разных пк, но на всех них стоял google chrome. Вам нужно смотреть, чтобы в eel.start('index.html', mode=«chrome», size=(760, 760)) параметр mode принимал значение того браузера, который есть на стороннем пк. Если не уверены, что там стоит chrome, то стоит сделать mode=«default».
Спасибо!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации