пятница, 20 июля 2012 г.

Pyinstaller или забудьте от таскании с собой интерпретатора

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


Для начала было решено писать всё на С++ (тем более я использую 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

Что как я считаю, весьма недурно.

1 комментарий:

  1. Сам пользуюсь для таких нужд С++ Qt , так , что размер не пугает.Ok обязательно попробую.

    ОтветитьУдалить