Вариант №1 cx_Freeze http://cx-freeze.readthedocs.org/en/latest/Из всех сборщиков вроде py2exe, pyinstaller и т.п. наиболее поддерживаемый в настоящее время.
Способ применения: делаешь виртуалку с виндой, ставишь python и все необходимые пакеты + cx_Freeze, проверяешь, что программа твоя запускается и нормально работает. Пишешь файл описания для cx_Freeze, примерный шаблон:
#setup.py
import sys
from cx_Freeze import setup, Executable
icon_file = "user.ico"
buildOptions = dict(icon=icon_file)
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup(
name="My Super Puper Program",
version="1.1.1",
author="Ivan Ivanov",
author_email="ivan@host.com",
url="http://host.com",
description="Cheers!",
options=dict(build_exe=buildOptions),
executables=[Executable("main.py", base=base, icon=icon_file)])
Ключевая строка
executables=[Executable("main.py", base=base, icon=icon_file)])
, где main.py - соответсвенно исполняемый файл.
Далее даешь команду
Создается пакет-инсталятор msi .
Делаешь чистую виртуалку с виндой, пробуешь установить, если все хорошо - готово, если нет то скорее всего не хватает библиотек, например для Qt-приложения работающего с базой данных или графикой, требуется положить библиотеки в папку сборки и по новой собрать msi. В общем добиаешься чистой инсталяции и приемлемой работы.
Для правки msi-пакета, скорее всего потребуется orca, сейчас уже не помню, но что-то там с иконкой приложения было, необходимо было править таблицу msi.
http://support.microsoft.com/kb/255905/ruВариант №2 Nuitka http://nuitka.net/doc/user-manual.htmlCборка подобна первому варианту, только не нужен setup.py и собирается всё в один exe-файл, без инсталятора.
nuitka --recurse-all program.py
В данном python-код транслируется в C++ и позже компилируется.
Есть поддержка кросскомпиляции, но пока в зачаточном состоянии, в общем нужно много курить документации, чтобы из под linux скомпилировать под windows, проще виртуалку поднять.
Вариант №3 Cythonhttp://cython.org/ http://docs.cython.org/index.htmlТоже компилятор, но с оптимизациями, при определенных условиях может дать прирост производительности до 1000 раз,
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize("helloworld.pyx")
)
Компиляция:
python setup.py build_ext --inplace