2015-08-26 2 views
3

У меня есть программа, которая в настоящее время зависит от numpy, с которой я работал над преобразованием с py2exe. Моя проблема заключается в том, что даже при сценарии, такие какУменьшение размера распределения py2exe, включая некоторые функции numpy

from numpy import array 
print array(1) 

что только использует функцию numpy.array, я не могу найти способ, чтобы исключить, казалось бы, ненужные части numpy упаковки, такие как в распределении numpy.linalg, который создается py2exe. Это приводит к тому, что размер распределения составляет более 80 МБ (30 МБ после застежки). Существует файл в папке с именем numpy.linalg._umath_linalg.pyd, который составляет 34 МБ, а другой - numpy.linalg.lapack_lite.pyd, который составляет 18 МБ - это действительно нужно быть там ?! .exe не запускается, если они просто удалены.

Мой вопрос: Как уменьшить размер результирующего распределения? Я знаю, что есть альтернативы py2exe и что если я смогу удалить зависимость от numpy, у меня не было бы этой проблемы, но я бы хотел придерживаться обоих этих.

Следующий сценарий установки - это то, что я использую, в результате получается распределение 87 МБ.

from distutils.core import setup 
import py2exe, sys 
import shutil 

sys.argv.append('py2exe') # No need to type in command line. 

py2exe_options = { 
     # 'excludes': ['numpy.linalg'], # Stopped the resulting exe from running 
     'compressed': True, # Saves 5MB, is this at the cost of some speed? 
     'optimize': 1 # I don't really understand what this does. 
     } 

setup(
    windows=[{'script': 'main.pyw'}], 
    options={'py2exe': py2exe_options}, 
    ) 

shutil.rmtree('build', ignore_errors=True) # Remove the build folder 
+0

Связанный: http://forums.xkcd.com/viewtopic.php?f=11&t=57929 – Siwel

+0

Да странно. Эти два файла '.pyd' в моей системе составляют только 68 и 26 КБ. Как вы установили Numpy? –

+2

Размер зависит от того, содержат ли файлы такие вещи, как Intel MKL/OpenBLAS/Atlas, статически связанные. Если вам не нужна быстрая линейная алгебра, вы можете минимизировать размер, компилируя Numpy без MKL/OpenBLAS/Atlas. –

ответ

4

Если у кого-то есть предложения, я бы хотел их здесь! Но вот что я сделал до сих пор.

Мне удалось уменьшить размер дистрибутива с 87 МБ до 34 МБ, переустановив numpy с использованием «неоптимизированного» бинарного файла, загруженного с here. Я считаю, что при выполнении операций с линейной алгеброй это, вероятно, будет намного медленнее, однако оно отлично работает для работы с массивами.

UPDATE
я сейчас получил свое распространение вплоть до 28MB, изменяя параметры py2exe в моем setup.py сценарии.

import distutils.core import setup 

py2exe_options = { 
     'compressed': True, 
     'optimize': 1, # 2 does not work. 
     'excludes': ['pydoc', 'doctest', 'pdb', 'inspect', 'pyreadline', 
      'locale', 'optparse', 'pickle', 'calendar'] 
     } 

setup(windows=['main.py'], options={'py2exe':py2exe_options}) 
Смежные вопросы