Найти - Пользователи
Полная версия: Распространение графического приложения python + pyside2
Начало » Python для экспертов » Распространение графического приложения python + pyside2
1
joker_s
Всем привет.
Написал графическую программу на Python + pyside2. Но так и не понял в какую сторону двигаться теперь.
Такое ощущение, что чего-то не понимаю до конца.
Есть программа с графическим интерфейсом. Для удобства вся логика в отдельных модулях mod1.py и mod2.py
В my_gui.py посреднический класс для запуска модулей и отправки сообщения в окно главной программы в отдельном потоке, и класс для запуска окна приложения.
1. Верная ли структура папок?
my_project
—-my_project
——– __init__.py (с номером версии)
——– mod1.py (Модуль с некой логикой)
——– mod2.py (Еще модуль с полезной логикой)
——– my_gui.py (Тут код для запуска графической оболочки, сюда импортируются оба модуля)
—-README.txt
—-setup.py (Тут использую код для сборки командой python3 setup.py sdist)
—-LICENSE.txt

—-requirements.txt (Тут pyside2)
2. Правильная ли эта структура для размещения на github?
3. Как распространять такую программу под Windows, Linux?
4. Где все-таки должен располагаться скрипт для запуска самого приложения my_gui.py, так как в моей структуре? Или лежать в корневой папке?
5. Должен ли я собрать пакет отдельно от my_gui.py, а потом уже его импортировать (пакет)? Пакеты собираются вместе с основной программой или нет? Или мне вообще не нужны никакие пакеты? Структура то у меня для пакета, но может есть другие способы для распространения? Просто я знаю только этот?

На данный момент если собрать все в пакет
 python3 setup.py sdist
, залить на PyPi и установить потом с помощью pip, все прекрасно работает. Из консоли я могу запускать так: my_gui. Устанавливается пакет в систему напрямую в site_packages и это не очень хорошо. Но это графическое приложение, может я должен был собрать пакет без него (без my_gui.py), а потом уже для него устанавливать свой пакет или импортировать в него используя какой-то другой setup.py для импорта и установки? Но что выкладывать на github и как? В том виде в каком сейчас или как-то по другому? Ведь я создаю одновременно и графическое приложение и пакет модулей к нему, который буду возможно использовать и в других программах.

Еще проблемы:
В my_gui.py я импортирую модули так:
 from my_project import mod1
 from my_project import mod2
Пакет без проблем собирается, устанавливается и работает.
 python3 setup.py sdist
 pip3 install my_project

Но напрямую
 python3 my_project/my_gui.py
файл my_gui.py не запускается, ошибка импорта.
Тогда я импортирую модули в my_gui.py так:
 import mod1
 import mod2
Теперт файл запускается напрямую
 python3 my_project/my_gui.py
,
при сборке пакета все отлично. Но после установки пакета ошибка импорта.
Для пакета работает только:
 from my_project import mod1
 from my_project import mod2

Я использую вариант который работает для пакета, но если скачать код с гитхаба, и попытаться запустить приложение:
 python3 my_project/my_gui.py
Ошибка импорта! Но если ее исправить тогда ошибка после установки и запуска пакета.

Вообщем запутался окончательно. Хотелось бы получить ответ на все эти вопросы.
Цель следующая:
Разобраться как правильно структурировать папки и импорты, чтобы не было ошибок в обоих случаях.
Продолжать работать над программой на github целиком и с модулями и с основной программой.
После клонирования с репа программа должна запускаться из папки без проблем.
Пакет должен собираться без проблем.
Создать установщик для windows, linux. Или как минимум найти какойто адекватный способ распространения и запуска.
Или установка с помощью pip это и есть адекватный способ?

Может я как-то не так все понимаю и неправильно объясняю, но я долго пытался разобраться сам пока не накопилось столько вопросов и я окночательно не запутался.
py.user.next
Для Windows должен быть установщик. Для Linux должен быть пакет. Для разработки должен быть проект. Чтобы собрать установщик для Windows, в проекте должны быть скрипты сборки установщика. Чтобы собрать пакет для Linux, в проекте должны быть скрипты сборки пакета.

Я думаю, ты просто зациклился на том, что проект, скачанный с GitHub'а, должен сразу быть готов к использованию во всех системах сразу. А нужно делать для каждой системы свой дистрибутив. А при сложных программах вообще разные проекты должны быть, потому что внешний вид программы может быть одинаковым в абсолютно разных операционных системах, а внутренности программы в этих операционных системах могут быть вообще разными по своей сути.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB