cx-freeze: exe из скрипта Python 3

Конечно же скрипты на python это здорово. Можно запускать на любой платформе. Можно при необходимости подправить под себя. Можно увидеть как другие реализуют какой то функционал. Но иногда требуется тупо exe файл.
Просто потому что нормальный пользователь впадает в некоторый ступор когда видит файл с расширением py 🙂
Весь цивилизованный мир использующий питон версии 2.х (а таких надо заметить большинство) с удовольствием пользуется замечательным инструментом py2exe.
Но если Вы (как и я) пользуетесь Python 3.x этот инструмент вам не подойдет. Он просто не поддерживает эту версию питона.
Вот тут нам на помощь придет другой инструментарий: cx_Freeze.
И так предположим у вас есть приложение С:script.py

  1. Скачиваем версию для Windows. Устанавливаем.
  2. В каталоге c:\Python31\Scripts находится файл cxfreeze.bat. Через этот файл и производится сборка exe-шника. Помощь по ключам которые он понимает прописаны на странице разработчика
  3. Создаем в каталоге c:\Python31\Scripts подкаталог dist. В него будут помещатся результат работы cx-freeze
  4. Создаем run.bat — в него будем писать обращение к cxfreeze.bat. Прописываем в него

    cd .
    del dist*.* /Q
    call cxfreeze "C:\script.py" --target-dir dist
    pause

  5. Запускаем и получаем exe-файл в каталоге c:\Python31\Scripts\dist

cx-freeze: exe из скрипта Python 3: 22 комментария

  1. VitaliAT

    Получается не 1 exe, а куча «pyd, zip, dll» общим весом около 18Мб — получается что просто всё в кучу особо не разбираясь и в итоге всё равно не удобно раз не 1 файл на выходе. Да и любой разнесчастный «Hello world!» будет весить больше чем игра Quake 1. Нужен робин гуд с мозгами который сможет выкинуть все нерабочие функции и уже ненужные комментарии поместив всё на выходе в 1 файл exe или хотябы exe и парочку dll максимум.

  2. borismor

    2 VitaliAT
    Все таки python — это интерпретатор) А cx-freeze дает возможность не устанавливать сам интерпретатор.
    Если хотите 1-н файл можете сделать его в виде sfx-архива WinRar. У него там есть возможность распаковывать во временный каталог и запускать. Как раз и размер уменьшите.

  3. Alex

    Отличная статья. С Вашего разрешения тоже несколько модифицирую, и себе на блог, естественно, ссылка на Вас обязательно.

  4. Антон

    Спасибо за подробную инструкцию! Хотелось бы отметить, что если устанавливали питон не в ту директорию, которая предлагалсь по умолчанию, то необходимо указать правильную в cxfreeze.

  5. Александр

    Пробовал сделать как написано, выдает ошибку — «Системе не удается найти указанный путь», что может быть не так?

  6. Аноним

    фигня в том, что в html коде стоит русская «C» и путь воспринимается коряво, переделайте на англ. . сцуко 3 минуты на тебя автор потерял

  7. Аноним

    “Системе не удается найти указанный путь”
    путь вообще задается с диска Д
    call cxfreeze «D:script.pyw» —target-dir dist

  8. Егор

    при установке cx_Freeze (3.3)x86 выдаёт в конце ошибку:
    «There is a problem with this Windows Installer package. A program run as part of the setup did not finish as expected. Contact your support personnel or package vendor.
    В указанной директории c:Python33Scripts есть файлы «cxfreeze», «cxfreeze-postinstall», «cxfreeze-quickstart» — и все НЕ ИМЕЮТ ТИПА.
    В принципе я всё написал. буду колдовать.

  9. Dima

    разобрался) надо использовать setup.py
    это своеобразный конфиг для сборщика. здесь указываем все параметры. чтоб не выводилось консольное окошко пишем base = ‘Win32GUI’
    более подробно всё написано здесь http://cx-freeze.readthedocs.org/en/latest/distutils.html

    import sys
    from cx_Freeze import setup, Executable

    base = None
    if sys.platform == ‘win32’:
    base = ‘Win32GUI’

    options = {
    ‘build_exe’: {
    ‘includes’: ‘atexit’
    }
    }

    executables = [
    Executable(‘C:ppgui\test.py’, base=base) # путь к py-файлу, \t — заэкранировал, потому что t — это табуляция 🙂
    ]

    setup(name=’simple_PyQt4′,
    version=’0.1′,
    description=’Sample cx_Freeze PyQt4 script’,
    options=options,
    executables=executables
    )

    и запускать этот setup надо так:
    c:Python33>python c:ppguisetup.py build
    пути у каждого свои естественно 🙂

  10. Аноним

    def sTart():
    print(‘тут выполняэм код нашей программы’)

    if ‘.exe’ in __file__:
    sTart()
    elif ‘.py’ in __file__:
    import os
    os.system(‘del dEbug*.* /Q’)
    os.system(‘call C:Python32Scriptscxfreeze «‘+__file__+'» —target-dir dEbug’)
    sTart()

  11. Семен

    теперь уже можно без телебоньканья скомпилить пайтон-файл в ехе через прогу ‘бозон’

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *