Ясно дело, тянет за собой python-овский runtime (но, в отличие от VB, только нужные модули). Runtime можно держать рядом, а можно запрятать внутрь исполняемого файла. Для работы скрипта в Windows 9x (ME) нужен ещё один файл размером 49664 байт
Немного цифр. Скрипт ini2xml:
py-файл | 8 752 |
exe-файл (с отдельным runtime) | 26 112 |
exe-файл (сжат upx, отдельный runtime) | 14 336 |
runtime сжат UPX | 2 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) | Bundle | UPX(Exe) | Время, мс |
Интерпретируемый | - | - | - | 11798.000 |
Исполняемый | No | No | No | 10773.000 |
Исполняемый | No | No | Yes | 10861.000 |
Исполняемый | No | Yes | No | 10991.000 |
Исполняемый | No | Yes | Yes | 10970.000 |
Исполняемый | Yes | No | No | 10804.000 |
Исполняемый | Yes | No | Yes | 10852.000 |
Исполняемый | Yes | Yes | No | 10861.000 |
Исполняемый | Yes | Yes | Yes | NotCompressibleException |
Пояснения:
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)