Полегшуємо використання pyinstaller для створення exe

Для того, щоб зробити збірку exe відповідно до мануала необхідно:

  1. Запустити Configure.py, який перевірить наявність усіх необхідних для збирання компонентів (виконувати при зміні конфігурацій, будь то додавання/видалення UPX, зміна бібліотек тощо)
  2. За допомогою MakeSpec.py з папки pyinstaller у відповідності з необхідними параметрами створити spec файл
  3. За допомогою Build.py з тієї ж папки, вказавши шлях до spec файлу, зробити збірку exe

У зв'язку з тим, що pyinstaller у мене зберігається в папці python (шлях за замовчуванням), а вихідні коди на іншому диску, то процедуру шаманства з шляхами в консолі і постійним дописуванням однакових параметрів я вирішив скоротити використовуючи bat файл, розбір якого зараз і буде зроблений .

Спочатку визначив цілі:

  1. Відв'язка від необхідності постійно ставити шлях до MakeSpec і Build файлів, а також spec файлу
  2. Отримання готового exe у тій директорії, як і вихідний код

set pyinstPath=c :\python26\pyinstaller set buildPath= % pyinstPath % \bin

:p-F :p/F :p/file :p--file if not "%2" == "" ( set pyFile= % 2 if not % fileParam % == 1 set fileParam= 1 ) shift & shift & goto ParamChk

:p-O :p/O :p/out :p--out якщо немає "%2" == "" set buildPath= % 2 shift & shift & goto ParamChk

:p-M :p/M :p/move :p--move set moveBin= 1 shift & goto ParamChk

n0 [/F [path]filename] [/O dir] [/M] echo. echo / F, - F, / файл, - файл - Path to .py file echo / O, - O, / out, - out - Output directory. Default directory - % buildPath % echo / M, - M, / move, - move - Move створено binary to .py file directory goto :EOF

:binBuild if % fileParam %== 0 echo Немає файлу для роботи з. Use / h for help & goto :EOF

set specParams= - F - X - o % buildPath %

"%pyinstPath%\MakeSpec.py" % specParams % "%pyFile%" for %% i in (% pyFile %) do ( set fileName= %%

ni ) % pyinstPath % \Build.py "%buildPath%\%fileName%.spec"

if % moveBin % == 1 ( for %% i in ( % pyFile % ) do ( set outDir= %%

pi ) move / y "%buildPath%\dist\%fileName%.exe" % outDir % )

А у нас тут можна отримати грант на тестовий період Яндекс.Хмари. Варто лише у полі «секретний пароль» запровадити «Хабр»

Читають зараз

Moscow Python Conf++ через три дні: про що розповість Bobuk і хто у цей час виступить у паралельних залах?

Кросспостинг постів з Instagram в паблік VK на Python

Винятки в Python тепер вважаються анти-патерном

Коментарі 16

1) Кросплатформенний 2) Менше проблем при перенесенні зібраного екзешника між різними версіями вінди. У py2exe без спеціального хаку поширені такі проблеми: www.google.ru/search?&q=py2exe+ImportError:+DLL+load+failed

Але мені загалом більше подобається py2exe – він нічого не розпаковує у тимчасову директорію та можливостей кастомізації у нього (наскільки я зрозумів) більше.

> 1) Кросплатформенний Ось з цього місця можна детальніше ... . >У py2exe без спеціального хаку поширені такі проблеми: Якщо класти pythonXX.dll поряд з exe'шником, то проблем бути не повинно…

>py2exe - він нічого не розпаковує в тимчасову Ем ... Ще більше не розумію. Грубо кажучи, на виході py2exe створюється папка, з exe запускалкою, і з усім необхідним для перенесення програми (dll ки, pyd, library.zip), і все це «слинковано». А на виході pyinstaller що? Іщо в linux виходить? Я не закликаю використовувати py2exe, просто хочу з'ясувати, як він працює. Чи не хотіли б ви написати докладнішу статтю?

> Ось із цього місця можна докладніше... Докладніше — на офіційному сайті. Коротко: за допомогою pyinstaller'a можна збирати інсталятори, що саморозпаковуються (я б їх так назвав) для пітонівських скриптів\проектів для декількох різних ОС (Win, MacOS, Linux, Irix), в той час як py2exe вміє «майструвати» тільки екзешники.