В последнее время мне часто приходится писать небольшие утилитарные приложения, которые я потом передаю другим людям для работы с ними. Соответственно python на этих машинах не установлен. А заставлять людей его ставить, тоже не очень хочется. Тут-то и возникает проблема с портабельностью приложения.
Для начала было решено писать всё на С++ (тем более я использую Qt), но мне очень не хватало батареек python`а. Поэтому я начал смотреть в сторону программ сборщиков в исполняемый файл для python.
Когда-то давно, для этих целей я пользовался zxFreeze, это безусловно отличный проект, но посмотрев документацию, я так и не нашёл способ запихать все используемые библиотеки в один единственный исполняемый файл, да и размер результатов не впечатлил. У библиотеки есть один безусловный плюс, она умеет работать с версиями python`а >= 3.0
Есть так-же проект py2exe умеющий всё что мне нужно, но, посмотрев дату последнего релиза (2008 год), я решил оставить старичка в покое.
И, наконец, герой сегодняшнего повествования, на котором я и остановил свой выбор, pyinstaller.
Важные для меня достоинства библиотеки:
Всё, теперь мы можем им пользоваться для своих нужд.
Для начала было решено писать всё на С++ (тем более я использую Qt), но мне очень не хватало батареек python`а. Поэтому я начал смотреть в сторону программ сборщиков в исполняемый файл для python.
Когда-то давно, для этих целей я пользовался zxFreeze, это безусловно отличный проект, но посмотрев документацию, я так и не нашёл способ запихать все используемые библиотеки в один единственный исполняемый файл, да и размер результатов не впечатлил. У библиотеки есть один безусловный плюс, она умеет работать с версиями python`а >= 3.0
Есть так-же проект py2exe умеющий всё что мне нужно, но, посмотрев дату последнего релиза (2008 год), я решил оставить старичка в покое.
И, наконец, герой сегодняшнего повествования, на котором я и остановил свой выбор, pyinstaller.
Важные для меня достоинства библиотеки:
- Способен собрать проект под все популярные платформы (Linux, Windows, MacOS)
- А так-же под 32/64 архитектуры процессора (исключение MacOS, под неё только 32bit)
- Работает с версиями python от 2.2 по 2.7 включительно (для тех кому нужна работа с python 3.0, рекомендую zxFreeze)
- Умеет собирать все зависимости (библиотеки python, DLL\SO файлы) в один исполняемый файл
- Сжатие с помощью upx
Установка и настройка
Первым делом скачиваем дистрибутив пакета со страницы проекта.
Последней версией на данный момент является 1.5.1 прямая ссылка.
После скачивания и распаковки архива, пакет следует сконфигурировать, для этого переходим в директорию пакета и запускаем Configure.py
Всё, теперь мы можем им пользоваться для своих нужд.
Сборка проекта
Сборка проходит в два этапа, первым делом с помощью Makespec.py создаётся файл .spec , включающий в себя все настройки, необходимые для сборки. Следующим этапом идёт сама сборка в исполняемый файл, производимая скриптом Build.py.
Для упрощения жизни, я написал простой батник под Windows, автоматизирующий сборку:
@echo off set progname=CardEditor set pyinstaller_dir=D:\bin\apps\pyinstaller %pyinstaller_dir%\Makespec.py --onefile --icon=icon.ico --name=%progname% main.py -X -c %pyinstaller_dir%\Build.py %progname%.spec rd build /s /q del warn%progname%.txt del logdict2.6.6.final.0-1.log del %progname%.spec copy dist\%progname%.exe %progname%.exe rd dist /s /q echo. pauseВ переменные
progname
и pyinstaller_dir
следует вписать имя проекта и путь к директории pyinstaller. Подробнее с синтаксисом команды Makespec можно ознакомится здесь.Результирующие исполняемые файлы для небольших утилит, получились следующих размеров:
С PyQt4 - 8.35 Mb
Без Qt - 3.50 Mb
Что как я считаю, весьма недурно.
Сам пользуюсь для таких нужд С++ Qt , так , что размер не пугает.Ok обязательно попробую.
ОтветитьУдалить