Pull to refresh

Comments 32

У PySide6/PyQt6 есть один интересный момент - размер скачиваемых с помощью pip - билиотек - 100Мб+. А представьте, что придется все это компилировать в exe. А нужен ли такой графический интерфейс, если я, например, использую пару радио-кнопок и одно поле ввода?

Я считаю, что Qt следует использовать только в том случае, когда нет подобного функционала в стандартной библиотеке Python - tkinter.

Генерация кода QtDesigner - это что-то с чем-то, если у вас русский язык в приложении. В сгенерированном py-файле присутсвует такая красота как u-строки, которую редко встретишь. Поэтому Qt в Python просто побаловаться можно, но не более того

Где вы такие цифры взяли?

~58.5mb for the unpacked PySide2 python app dir
~27mb for the zipped portable pack
~18mb for the installer executable using 7zip self extractor.

pip install pyside6
Collecting pyside6
  Obtaining dependency information for pyside6 from https://files.pythonhosted.org/packages/0c/e3/2a7155a4f776b50f88add0af1e6af2c976e5819ab4fb375cb811157aacd5/PySide6-6.6.2-cp38-abi3-win_amd64.whl.metadata
  Downloading PySide6-6.6.2-cp38-abi3-win_amd64.whl.metadata (5.5 kB)
Collecting shiboken6==6.6.2 (from pyside6)
  Obtaining dependency information for shiboken6==6.6.2 from https://files.pythonhosted.org/packages/74/46/00f867c025018148487a1138209513fbd4dcbae70faed052b027499f9c56/shiboken6-6.6.2-cp38-abi3-win_amd64.whl.metadata
  Downloading shiboken6-6.6.2-cp38-abi3-win_amd64.whl.metadata (2.6 kB)
Collecting PySide6-Essentials==6.6.2 (from pyside6)
  Obtaining dependency information for PySide6-Essentials==6.6.2 from https://files.pythonhosted.org/packages/a0/08/eaa29a1e01c13241aacab6bfcf15cf49ae026abeaa1dafc018b42909dbb1/PySide6_Essentials-6.6.2-cp38-abi3-win_amd64.whl.metadata
  Downloading PySide6_Essentials-6.6.2-cp38-abi3-win_amd64.whl.metadata (3.8 kB)
Collecting PySide6-Addons==6.6.2 (from pyside6)
  Obtaining dependency information for PySide6-Addons==6.6.2 from https://files.pythonhosted.org/packages/75/06/97aabf6fe31413616ff9d4165db4802e9991a97eaa04250e731a6cc5d6ab/PySide6_Addons-6.6.2-cp38-abi3-win_amd64.whl.metadata
  Downloading PySide6_Addons-6.6.2-cp38-abi3-win_amd64.whl.metadata (4.2 kB)
Downloading PySide6-6.6.2-cp38-abi3-win_amd64.whl (519 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 519.0/519.0 kB 2.2 MB/s eta 0:00:00
Downloading PySide6_Addons-6.6.2-cp38-abi3-win_amd64.whl (110.8 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 110.8/110.8 MB 4.2 MB/s eta 0:00:00
Downloading PySide6_Essentials-6.6.2-cp38-abi3-win_amd64.whl (77.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 77.2/77.2 MB 5.8 MB/s eta 0:00:00
Downloading shiboken6-6.6.2-cp38-abi3-win_amd64.whl (1.1 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 7.5 MB/s eta 0:00:00
Installing collected packages: shiboken6, PySide6-Essentials, PySide6-Addons, pyside6
Successfully installed PySide6-Addons-6.6.2 PySide6-Essentials-6.6.2 pyside6-6.6.2 shiboken6-6.6.2

[notice] A new release of pip is available: 23.2.1 -> 24.0
[notice] To update, run: python.exe -m pip install --upgrade pip

Ввёл команду так, как автор написал в статье. Где вы взяли такие цифры?

Ну так а с чего вы взяли, что всё это будет распространяться вместе с софтом? Не будет, если разработчик соображает. Какая разница, сколько весит development environment пока она не дошла до сотен гигов? Важно обычно то, сколько придётся скачивать и распаковывать по месту использования.

Почти пустой pyside6 проект компилируется в линуксах с помощью nuitka в один бинарный исполняемый файл (--onefile) размером 30МБ, в винде примерно тоже самое. Для чего-то очень простого pyside6 конечно оверхэд. u префикс - это просто явное указание, что строка unicode, всем понятно, что это уже давно не актуально, но здесь придираться я бы точно не стал.

А какую альтернативу предложите, если нужно маленькое desktop .exe приложение с парой кнопок, чекбоксов, и текстовым полем ввода? Чтобы не 30мБ весило, а хотя бы 1.5

Не использовать питон) Даже самое минималистичное приложение с tkinter будет занимать 7МБ, с Dear PyGui примерно тоже самое.

C nuitka даже очень простое консольное приложение компилируется в бинарник размером 3.5МБ :)

Спасибо за ответы! буду смотреть в эти стороны.

Rust, причём чтобы уложиться в 1.5 интерфейс вы будете писать на чистом WinAPI вручную. Если 3-5 Мб становятся нормальными, то тут уже можно использовать библиотеки для гуёв типа egui. Наконец, в 7Мб можно уложить красивый интерфейс на Html+CSS, правда только при условии, что список совместимых ОС ограничен обновлённой 10-11 и вмеру свежими столовыми десктопными Линуксами.

Тогда уж nanogui, если оставить в либе только кнопоки, чекбоксы и текстовые поля ввода как хотел тс, то я думаю можно будет уложиться в 400-700кБ на всё, и при этом это будет вменяемо и удобоваримо, а не голый winapi. Если очень хочется обмазываться ржавчиной - тогда slint наверное.

Для Windows на нативном win32 такое будет менее 100кб.

Это как раз то, что я искал! )

вот такую сейчас ваяю, 85кб

u префикс - это просто явное указание

Вот реальный пример генерации таких строк из QtDesigner с русским языком

self.checkBox.setText(QCoreApplication.translate("MainWindow", u"\u041e\u0434\u043d\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043d\u043e\u0441\u0442\u044c", None))

но здесь придираться я бы точно не стал

А я бы стал

Где-то что-то не смогло в utf-8, вот и результат. Вот попробовал конвертировать:

MainWindow.setWindowTitle(_translate("MainWindow", "Окно"))

Ну я компилировал приложение с графической сценой в .exe с помощью pyinstaller и весит оно 56 мб. А чем мешают u-строки? Зачем вообще лезть в сгенерированный из ui в py фаил? От него наследуешься и с объектами работаешь. А u-строки там, или ещё что-то, никакой роли не играет.

вместо tkinter еще ctypes использовать можно, тоже из коробки в питоне

Без описания упаковки проекта в .ехе с помощью, например, пайинсталлера, имхо, пост не полностью раскрыл тему.

Данный туториал, лишь часть от общей картины. Развертка и упаковка приложения будет в последующих уроках. Для начало хочу дать основы. Д и упаковывать Label и QPushButton неинтересно.

О, я пользуюсь не PySide, а PyQt, думаю это одно и то же. Хотелось спросить, а в каких приложениях можно использовать QDial? Он очень красивый, но как эго использовать я не знаю. Может кто-нибудь мне подскажет?)

Имхо, начинать рассказ про PyQt/PySide надо с процесса упаковки в исполняемый файл, аля exe/elf, иначе зачем это приложение нужно, если его передать никому нельзя?

Зачем Вам exe файл ? Это же Python. Вся его ценность в том, что исходник открыт ничего не надо компилить. Если вы собираетесь распространять коммерческое приложение, то есть Java и прочее.

Т.е. вы считаете, что питонисты не хотят писать закрытый комерческий софт, хотя бы быстро прототип накидать, чтобы и ноухау не утекли, и ПО клиентам передать можно было?

Конечно хотят! Но разве это значит , что это хорошая практика? Прям Ноу-Хау утечет.... Open source уже давно показало, что деньги можно делать не на продаже закрытого софта, да нельзя алгоритмы вроде патентовать, т.ч. идея - написать код и думать, что можно нажиться на его продаже, мне кажется устаревшей. Вот сервис вокруг софта, это совсем другая тема.

т.е., при таком подходе, питон подходит только для инхаус сервисной разработки (обычно, это делается через веб, питон + js, без pyqt) или open source...

А аналитика, а ИИ, еще много чего. Представляете - перекомопилить программу при каждом изменении бизнес требований или писать монструозный пакет с кучей настроек? А на питончике за пять минут поправил и в продакшн :-) А вернуться на несколько шагов назад в выполнении программы, и по другому обработать данные , которые были на этом этапе? Как в Jupiter Notebook. Или группой разработчиков, которые находятся в разных локациях, пилить не тиражируемый проект с web интерфейсом. Да много чего еще. А вот если нужно распространять пакет, то его даже для использования в python проектах на других языках пишут обычно.

это всё - инхаус сервисы и работы, про которые я писал выше, я так понимаю Вашу точку зрения:" если хотите продукт передавать заказчику, то питон не нужен "

Ну я какие проблемы вижу. Ну передал я заказчику свой Python проект cо списком зависимостей. А у заказчика еще несколько таких проектов и у каждого свои зависимости и версии пакетов и даже версии Python разные. Я бы на месте заказчика подумал прежде чем с таким связываться.

звучит как постановка задачи, а не как не решаемая проблемма, есть pipenv и т.п.

Нерешаемых проблем нет, но не все проблемы надо решать. Как pipenv  избавит заказчика от необходимости иметь на своем сервере/компе ВСЕ версии Python и Все версии используемых пакетов, вместе со всеми их багами и уязвимостями или ему придется создать еще базу данных и вести учет что ему надо хранить и для каких целей, а что можно уже удалять. Ну как то это немного странно выглядит. Когда есть языки, которые для тиражируемых решений без этого зоопарка позволяют обходиться. Вот у некоторых драйверов принтеров на Ubuntu, с установщиком на питоне, пропал графический интерфейс, всего то версия QT сменилась. Он там можно сказать не особо и нужен, но все же...

спешу вас уверить, что на других языках проблем с версионированием и совместимостью библиотек не меньше.

Sign up to leave a comment.

Articles