a.bondarenko
Я вроде уже и распрощался с вами (и с мечтами запустить свою приладу на питоне, например, с флешки на любом компе), но продолжаю все же писать, чтобы поддержать беседу. Я с вами полностью со всем согласен. Просто добавлю, что у меня нет такой задачи, чтобы приложение, о котором идет речь, работало через интернет.
Возьми любую программу у себя в винде. Как она попала в систему? Тот же Microsoft Word или Microsoft Excel (это совершенно разные программы), разве они представляют из себя один экзешник? Чтобы их использовать, их нужно установить из дистрибутива. Ты ставишь пакет (пакет программ) Microsoft Office и эти разные программы ставятся к тебе в систему. Приди к понятию дистрибутива и тебе станет всё равно, один там экзешник или не один, находятся ли все функции в нём или лежат отдельно в библиотеках функций, подключаемых динамически (dll - dynamic link library).
Что из себя представляют программы класса cx_Freeze: они просто берут питон и твои скрипты, складывают в один самораспаковывающийся архив и потом он при каждом запуске на время распаковывает питон и твои скрипты и эти скрипты запускаются в этом питоне.
Почему нужно прийти к дистрибутиву, а не стараться засовывать всё в один экзешник:
1)
Засовывание в один экзешник накладывает множество ограничений на твою программу. Чтобы её поменять, если ты нашёл в ней баг, тебе надо её заново собирать и заново распространять через копирование. То же самое касается того питона, если в нём баг нашли и тебе надо его обновить. То есть при любой мелочи, даже не относящейся к твоей программе, тебе придётся её всю заново распространять. Если же ты собрался дорабатывать программу (а программы никогда не заканчиваются, ты всегда просто находишься в какой-то её версии), может запросто потребоваться вторая программа, так как нельзя всё в одной программе лепить. И что ты будешь делать, второй архив со второй копией питона? Рано или поздно десяток программ из твоего пакета разрастётся до гигабайта только потому, что всё пространство ушло на одни и те же десять копий питона. Это и есть ограничения одного экзешника - ты думал сделать получше, а получилось, что затормозил развитие программы. Это как Word и Excel были бы в одном экзешнике.
2)
Дистрибутив точно так же можно сделать одним исполняемым файлом setup.exe. Посмотри на те программы, которыми ты пользуешься, все профессиональные программы (не самоделки от отдельных авторов, а продукты от компаний, даже мелкие продукты, плагины к браузеру и тому подобное) распространяются в виде установщиков, которые ты скачиваешь, запускаешь и он дальше сам всё устанавливает и вся эта программа прописывается в системе везде правильно (а часто это надо сделать по всей системе и в разных её местах) и точно так же там есть деинсталлятор, который умеет делать всё обратно. Ты пойми, то, что твоя программа не регистрируется в реестре винды, - это вопрос времени. Завтра тебе надо будет сначала её зарегистрировать в реестре, прежде чем запускать, и всей этой процедуры не должно быть внутри программы, этим должен будет заниматься отдельный установочный скрипт. Те же конфигурационные файлы программы (а рано или поздно они появляются, чтобы учесть все пожелания всех пользователей) должны ставиться в правильные места, которые предварительно должны проверяться на право записи в директорию или в ветку реестра. Этим всем сама программа не должна заниматься, этим должен заниматься специальный скрипт из установщика. Установщики сами по себе бывают такими сложными, что сами становятся целыми комплексами программ и скриптов.
Поэтому не надо всё класть в один экзешник. Разделяй и властвуй. Каждый сверчок должен знать свой шесток - каждая программа или мелкий скрипт должны заниматься только своим делом.
tags: distribution