понедельник, 17 февраля 2014 г.

Собираем поставку python-приложения используя cx_Freeze


Когда я закончил работу над скриптом для распознавания текста то столкнулся с неожиданной проблемой. Дело в том что компьютер на котором его планировалось запускать работает под управлением ОС Windows и у оператора нет возможности установить python и необходимые библиотеки. Я столкнулся с таким препятствием впервые так как раньше мои скрипты применялись только на компьютерах с *nix системами, а там поставить все необходимое из репозитория не проблема. Решить вопрос я смог при помощи cx_Freeze. Свой опыт по его использованию я решил изложить в этом небольшом мануале.

Анамнез

cx_Freeze это набор скриптов и модулей для сборки поставки приложения из python скриптов. Является прямым конкурентом py2exe и py2app в отличии от них является кросс-платформенным и потенциально способен работать на любой платформе на которой работает сам python.

Фреймворк опубликован под лицензией PSF.

Рецепт

Первое что вам потребуется сделать -  установить пакет cx_Freez. Проще всего это можно сделать при помощи pip.
После этого, в папке скрипта который должен быть собран, необходимо создать скрипт сценария сборки. По конвенции он может иметь любое имя, я же назвал свой "setup.py". Ниже приведен пример скрипта сборки для проекта Dummy OCR:

Параметры компиляции могут быть установлены как атрибуты конструктора объекта Executable. Также некоторые из них можно передать через словарь из параметров (в примере build_exe_options). Ниже рассмотрены основные опции компиляции приложения и описание:

Название опции Описание
script Имя файла скрипта. Нельзя передать через словарь параметров.
initScript Инициализирующий скрипт. Будет выполнятся перед выполнением основного скрипта. Как правило применяется для конфигурации окружения. Нельзя передать через словарь параметров.
base Тип приложения. По факту имя исполняемого файла-болванки для целевой платформы который будет использован. Можно задать свой но записав абсолютный путь, иначе путь следует указывать начиная от поддиректории cx_Freeze.
Для Windows из коробки поддерживаются следующие варианты:
  • Console
  • Win32GUI
  • Win32Service
Нельзя передать через словарь параметров.
path Список путей где будет проводится поиск. Нельзя передать через словарь параметров.
targetDir Имя директории с билдом. Нельзя передать через словарь параметров.
targetName Имя исполняемого файла. Нельзя передать через словарь параметров.
includes Список модулей включенных в компиляцию.
excludes Список модулей исключенных из компиляции.
packages Список пакетов включенных в компиляцию.
replacePaths Модифицирует имена файлов привязанных к объектам в коде при выводе в tracebacks. Принимает список кортежей состоящих из двух элементов "путь который следует найти" и "путь который следует заменить". При поиске по ‘*’ обработает директорию содержащую весь пакет за исключением относительного пути к модулю.
compress Флаг - сжимать байт-код модулей.
copyDependentFiles Флаг - копировать зависимые файлы в сборку.
appendScriptToExe Флаг - указывает на необходимость включить скрипт непосредственно в тело исполняемого файла.
appendScriptToLibrary Флаг - указывает на необходимость включить скрипт в архив библиотек сборки.
icon Имя файла-иконки который должен быть включен в исполняемый файл для Windows приложения, или помещен в директорию сборки для других платформ.
namespacePackages Список неймспейс-пакетов (их пути изменены при помощи pkgutil)
shortcutName Имя ярлыка исполняемого файла в случае включения в MSI-пакет.
shortcutDir Имя директории в которой будет расположен ярлык после установки MSI-пакета.

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

python setup.py build
На данный момент поддерживаются следующие команды:

Команда Описание
build, build_exe Собрать проект.
install, install_exe Собрать набор exe-файлов. Применяется для установки Windows и RPM пакетов.
bdist_msi Создать MSI-пакет.
bdist_rpm Собрать RPM-пакет.
bdist_mac Собрать приложение для Mac OS (.app - директорию).
bdist_dmg Собрать DMG-образ диска для инсталляции на Mac OS.

Каждая из этих команд может быть сконфигурированна своим набором параметров. Ознакомится с ними можно на официальном сайте.

Почему не py2exe

Py2exe был отличной утилитой но к сожалению не обновлялся с 2008-го года. Посему я решил попробовать нечто более актуальное. Хотя официальный туториал утверждает о наличии поддержки версий языка вплоть до 3.1.

Ссылки

Официальный сайт.
Репозиторий на BitBucket.

Комментариев нет:

Отправить комментарий