2015-08-26 4 views
3

J'ai un programme qui dépend actuellement de numpy que j'ai travaillé sur la conversion avec py2exe. Mon problème est que même avec un script tel queRéduire la taille de la distribution py2exe, tout en incluant quelques fonctions numpy

from numpy import array 
print array(1) 

qui utilise uniquement la fonction numpy.array, je ne peux pas trouver un moyen d'exclure les parties apparemment inutiles du paquet numpy tels que numpy.linalg dans la distribution créée par py2exe. Cela se traduit par une taille supérieure à 80 Mo (30 Mo après zippage). Il y a un fichier dans le dossier appelé numpy.linalg._umath_linalg.pyd qui est 34MB et un autre appelé numpy.linalg.lapack_lite.pyd qui est 18MB - est-ce que ces fichiers ont vraiment besoin d'être là ?! Le .exe ne fonctionne pas s'il est simplement supprimé.

Ma question est, comment puis-je réduire la taille de distribution qui en résulte? Je suis conscient qu'il existe des alternatives à py2exe et que si je pouvais supprimer la dépendance sur numpy je n'aurais pas ce problème, mais je voudrais rester avec les deux.

Le script de configuration suivant est ce que j'utilise, ce qui donne une distribution de 87 Mo.

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

connexes: http://forums.xkcd.com/viewtopic.php?f=11&t=57929 – Siwel

+0

Huh bizarre. Ces deux '.pyd' fichiers sur mon système sont seulement 68 et 26 Ko. Comment avez-vous installé Numpy? –

+2

La taille dépend de l'intégration statique des fichiers comme Intel MKL/OpenBLAS/Atlas. Si vous n'avez pas besoin d'algèbre linéaire rapide, vous pouvez réduire la taille en compilant Numpy sans MKL/OpenBLAS/Atlas. –

Répondre

4

Si quelqu'un a d'autres suggestions, j'aimerais les voir ici! Mais voici ce que j'ai fait jusqu'ici.

J'ai réussi à réduire la taille de la distribution de 87 Mo à 34 Mo en réinstallant numpy en utilisant un binaire «non optimisé» téléchargé de here. Je crois que ceci est susceptible de courir beaucoup plus lentement en faisant des opérations linéaires d'algèbre, cependant cela fonctionne très bien pour moi travaillant avec des arrangements.

MISE À JOUR
J'ai maintenant obtenu ma distribution jusqu'à 28Mo en modifiant les options de py2exe dans mon script 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})