Поиск по этому блогу

вторник, 27 марта 2012 г.

Компиляция EXE из Python в Linux

КРОСС-УПАКОВКА PYTHON КОДА В EXE ФАЙЛ ИЗ LINUX C ПОМОЩЬЮ PYINSTALLER

Рано или поздно перед Python программистом встает проблема распространения своего ПО на компьютерах без установленного интерпретатора Python. Наиболее рациональным способом при этом кажется упаковка кода в автономный бинарный файл. Для этого существует целый сомн фреймворков.
По прочтении обсуждений в разных местах, пришел к выводу, что PyInstaller лучше всего подходит для данных целей из-за простоты в использовании, своей кросс-платформенности и
потому, что собранный им exe-файл легче переносится с одной версии Windows на другую. А так же позволяет без особых танцев собирать бинарники для Windows из-под других операционных систем.

ПОДГОТОВКА


Нам понадобятся:
  • Python2 — К сожалению PyInstaller работает только для Python-2.x.x
  • Сам Pyinstaller

— дополнения Python для Windows. Опять же последняя стабильная версия (216) 

— ну без него тут никуда. 



Я тестировал кросс-сборку на Ubuntu 11.04 с Python 2.7.1 и Wine 1.3.20.



Ставим все необходимое:



#Wine

sudo apt-get install wine1.3-dev

#Python

wget python.org/ftp/python/2.7.1/python-2.7.1.msi

wine msiexec /i python-2.7.1.msi



#Pyinstaller

wget www.pyinstaller.org/static/source/1.5/pyinstaller-1.5.tar.bz2

tar xvf pyinstaller-1.5.tar.bz2



#Pywin32

wget downloads.sourceforge.net/project/pywin32/pywin32/Build216/pywin32-216.win32-py2.7.exe?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fpywin32%2Ffiles%2Fpywin32%2FBuild216%2F&ts=1305544745&use_mirror=citylan-o pywin32.exe

wine pywin32.exe
wine pywin32-216.win32-py2.7.exe 

НАСТРОЙКА И ЗАПУСК



Теперь необходимо настроить Pyinstaller с помощью скрипта Configure.py. Конфигурацию надо производить каждый раз когда меняется конфигурация Python, поэтому имеет смысл держать отдельную версию Pyinstaller для каждой версии Python. Сконфигурируем Pyinstaller под Windows-версию интерпретатора:



cd pyinstaller-1.5

wine ~/.wine/drive_c/Python27.exe Configure.py


wine ~/.wine/drive_c/Python27/python.exe Configure.py


Теперь можно собирать exe-файл. Сначала создаем spec-файл, в котором содержаться настройки упаковки проекта. Для наглядности назовем упаковываемый файл test.py (в случае, когда в проекте не один файл, указываем путь к главному).



wine ~/.wine/drive_c/Python27.exe Makespec.py test.py
wine ~/.wine/drive_c/Python27/python.exe Makespec.py test.py



По умолчанию папка со spec-фалом будет создана в папке Pyinstaller и будет иметь имя упаковываемого файла без расширения (в нашем случае test).



К команде создания spec-файла можно добавить полезные ключи, например:
  • –onefile — по умолчанию PyInstaller создает exe-файл и кладет в папку рядом с ним необходимые dll. Этот ключ форсирует упаковку всего в единый бинарник.
  • –out=DIR — позволяет задать определенную папку для spec-файла
  • –windowed — под Windows отключает консоль приложения


И наконец финальный этап — построение:



wine ~/.wine/drive_c/Python27/python.exe Build.py test/test.spec



Упакованное приложение можно найти в папке dist/ внутри папки со spec-файлом.


ps

~/PytExe/pyinstaller-1.5$ wine ~/.wine/drive_c/Python27/python.exe Makespec.py -F -X /home/gammi/Dropbox/Archive/WOT/UDP/server2.py


wine ~/.wine/drive_c/Python27/python.exe Build.py server2/server2.spec


Это всё из каталога ~/PytExe/pyinstaller-1.5$
Сборка будет валяться там же в одноимённой с программой папке

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

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