Вверх ↑
Ответов: 5446
Рейтинг: 323
#1: 2010-02-11 13:17:57 ЛС | профиль | цитата
Разобрался с py2exe - "компилятором" питоновских скриптов в exe-файл. В кавычках - потому что работает по принципу VB: компилирует скрипт в байт-код и прикрепляет к интерпертатору.

Ясно дело, тянет за собой python-овский runtime (но, в отличие от VB, только нужные модули). Runtime можно держать рядом, а можно запрятать внутрь исполняемого файла. Для работы скрипта в Windows 9x (ME) нужен ещё один файл размером 49664 байт

Немного цифр. Скрипт ini2xml:
py-файл8 752
exe-файл (с отдельным runtime)26 112
exe-файл (сжат upx, отдельный runtime)14 336
runtime сжат UPX2 404 438
runtime не сжат4 655 808
exe-файл (с встроенным несжатым runtime)3 694 801
exe-файл (с встроенным сжатым runtime)2 390 434
UPX(exe+rt)14 336+2 404 438=2 418 774
(exe+rt)26 112+4 655 808=4 681 920



Теперь поговорим о производительности. Замер делался следующим скриптом:
#!/usr/bin/env python

import random
import math
import time

t1 = time.time()
count_inside = 0
for count in range(0, 10000000):
d = math.hypot(random.random(), random.random())
if d < 1: count_inside += 1
count += 1
print 4.0 * count_inside / count
t2 = time.time()
print 'It took %0.3f ms' % ((t2-t1)*1000.0)

Машина, на которой проводился тест:
Intel(R) Core(TM)2 Duo CPU E6750 @ 2.66 GHz
RAM: 4,00 GB
OS: Windows 7 Ultimate x64

Не смотря на 64-разрядность ОС, тесты проводились с 32-разрядной версией Python (и py2exe)

Результаты:
РежимUPX(Runtime)BundleUPX(Exe)Время, мс
Интерпретируемый---11798.000
ИсполняемыйNoNoNo10773.000
ИсполняемыйNoNoYes10861.000
ИсполняемыйNoYesNo10991.000
ИсполняемыйNoYesYes10970.000
ИсполняемыйYesNoNo10804.000
ИсполняемыйYesNoYes10852.000
ИсполняемыйYesYesNo10861.000
ИсполняемыйYesYesYesNotCompressibleException


Пояснения:
1) bundle=No - отдельный runtime, Yes - встроенный в exe
2) UPX (из комплекта hiasm) отказался сжимать exe с встроенным сжатым runtime.

Как видно, разница во времени исполнения незначительна.


И последнее: прямо из скрипта "компиляции" можно создать скрипт инсталлятора (в комплекте идёт скрипт для InnoSetup, в сети можно найти и для NSIS). Скрипт InnoSetup можно сразу же откомпилировать.


В следующем релизе ожидается:
  • Компоненты для работы с ini и xml файлами
  • Поддержка компиляции в exe

Опрос: какой тип выходного файла сделать?
Варианты ответов:
  • exe-файл (с отдельным runtime)
  • exe-файл (сжат upx, отдельный runtime)
  • exe-файл (с отдельным сжатым runtime)
  • exe-файл (сжат upx, отдельный сжатый runtime)
  • exe-файл (с встроенным несжатым runtime)
  • exe-файл (сжат upx, встроенный несжатый runtime)
  • exe-файл (с встроенным сжатым runtime)

карма: 1

0