2015-08-26 61 views
3

我有一個程序,目前依賴於numpy,我一直在努力轉換py2exe。我的問題是,即使腳本如減少py2exe分佈大小,同時包括一些numpy功能

from numpy import array 
print array(1) 

,只有使用功能numpy.array,我找不到任何方式排除,如在分配numpy.linalg由創建numpy包看似不必要的部分py2exe。這導致分配大小超過80MB(壓縮後爲30MB)。在名爲numpy.linalg._umath_linalg.pyd的文件夾中有一個文件,它是34MB,另一個文件是numpy.linalg.lapack_lite.pyd,它是18MB - 這些文件真的需要在那裏嗎?! .exe僅在被刪除時纔會運行。

我的問題是,我該如何減少由此產生的分佈大小?我知道有py2exe替代方案,如果我可以刪除依賴numpy我不會有這個問題,但我想堅持這兩個。

以下安裝腳本是我正在使用的,導致87MB分發。

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 KB。你是如何安裝Numpy的? –

+2

文件大小取決於文件是否包含英特爾MKL/OpenBLAS/Atlas靜態鏈接英寸等內容。如果您不需要快速線性代數,可以通過編譯Numpy而不使用MKL/OpenBLAS/Atlas來縮小文件大小。 –

回答

4

如果有人有任何進一步的建議,我想在這裏他們!但這是我迄今爲止所做的。

我已經設法通過使用從here下載的「未優化」二進制文件重新安裝numpy,將分發的大小從87MB減少到34MB。我相信在進行線性代數運算時,運行速度可能會慢很多,但是對於我使用數組的運算來說,它工作得很好。

UPDATE
現在我已經通過改變我的setup.py腳本py2exe選擇了我分配到28MB。

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})