2017-01-06 4 views
0

J'ai un programme qui crée un nuage de mots, j'essaie d'inclure le module wordcloud dans le fichier .exe en utilisant py2exe, mais j'ai observé dans la bibliothèque. fichier zip dans le dossier dist que py2exe recueille tous .pyd et .pyc à l'exception de ceux qui n'ont pas de fichier d'extension. Dans un sens, le fichier stopwords du module wordcloud ne peut pas être empaqueté par py2exe mais c'est un fichier essentiel pour exécuter le WordCloud().Erreur 2 (aucun tel fichier) dans le dossier dist py2exe pour les mots vides wordcloud

Ma première approche a été de renommer le fichier de mots vides en .txt, je relance le code et il me donne un Errno2, il ne peut pas localiser le fichier stopwords.txt. Je reviens donc à sa forme originale, celle sans extension.

Ma deuxième approche est d'inclure le fichier soprword à my_datafile dans py2exe setup.py:

from distutils.core import setup 
import py2exe,sys,os 
import matplotlib 
import wordcloud 
import matplotlib.backends.backend_tkagg 

sys.setrecursionlimit(5000) 
Mydata_files =[('file', ['C:\\Python27\Lib\\site-packages\\wordcloud\\stopwords.*'])] 
Mydata_files.extend(matplotlib.get_py2exe_datafiles()) 
setup(
    console=['._ProbMod_.py'], 
    data_files = Mydata_files, 
    options={ 
     'py2exe': { 
      'includes': ['sklearn.neighbors.typedefs','sklearn','sklearn.utils.sparsetools._graph_validation','sklearn.utils.validation','scipy.sparse.csgraph._validation','sklearn.utils.weight_vector','sklearn.utils.lgamma','FileDialog', 
          'scipy.special._ufuncs_cxx','scipy','matplotlib','pylab','FileDialog', 'scipy.integrate', 'scipy.special.*','scipy.linalg.*','matplotlib.backends.backend_tkagg'] 
     } 
    } 
) 

le résultat est le même, Errno 2, il ne peut pas trouver le fichier dans le fichier des mots vides de library.zip.

Ma troisième approche était d'inclure le module wordcloud dans le "include" fonction de py2exe:

from distutils.core import setup 
import py2exe,sys,os 
import matplotlib 
import wordcloud 
import matplotlib.backends.backend_tkagg 

sys.setrecursionlimit(5000) 
setup(
    console=['._ProbMod_.py'], 
    data_files = matplotlib.get_py2exe_datafiles(), 
    options={ 
     'py2exe': { 
      'includes': ['sklearn.neighbors.typedefs','sklearn','sklearn.utils.sparsetools._graph_validation','sklearn.utils.validation','scipy.sparse.csgraph._validation','sklearn.utils.weight_vector','sklearn.utils.lgamma','FileDialog', 
          'scipy.special._ufuncs_cxx','scipy','matplotlib','pylab','FileDialog', 'scipy.integrate', 'scipy.special.*','scipy.linalg.*','matplotlib.backends.backend_tkagg','wordcloud'] 
     } 
    } 
) 

encore Errno 2 persistera.

Dernière approche était de copier manuellement les mots vides dans le dossier wordcloud dans le fichier library.zip malheureusement, il n'a pas fonctionné aussi.

Est-ce que quelqu'un sait comment dire à py2exe d'inclure tous les fichiers dans un dossier de module site-packages et pas seulement pour empaqueter .pyc et .pyd?

+0

'(C: \\ Python27 \ Lib \\ site-packages \\ wordcloud \\ stopwords.FILE' pas sûr de comprendre.) D'abord, je vois qu'il y a un' ('trop au début de la chaîne. est l'explication confuse Vous dites que le fichier s'appelle 'file.' seulement, mais la chaîne dit qu'elle s'appelle' stopwords.FILE' .Lequel est-ce? –

+0

Salut zorberg pour la réponse, j'ai édité ma question –

+0

' C: \\ Python27 \ Lib \\ site-packages \\ wordcloud \\ stopwords ') 'bien maintenant vous avez encore foiré, mais différemment.: D Quoi qu'il en soit, les fichiers sans extension sont généralement adressés par" nom de fichier. "Avec le point à la fin exprimant qu'il n'y a pas de suffixe Donc, ma conjecture est que '' C: \\ Python27 \ Lib \\ site-packages \\ wordcloud \\ stopwords.'' pourrait résoudre le problème? –

Répondre

0

La solution est tout à fait je brut réédité mon setup.py en:

from distutils.core import setup 
import py2exe,sys,os 
import matplotlib 
import matplotlib.backends.backend_tkagg 
import wordcloud 
from wordcloud import WordCloud, STOPWORDS 

sys.setrecursionlimit(5000) 
Mydata_files = matplotlib.get_py2exe_datafiles() 
setup(
    console=['._ProbMod_.py'], 
    data_files = Mydata_files, 
    options={ 
     'py2exe': { 
      'dll_excludes':['MSVCP90.DLL'], 
      'skip_archive' : True, 
      'packages':['wordcloud'], 
      'includes': ['sklearn.neighbors.typedefs','sklearn','sklearn.utils.sparsetools._graph_validation','sklearn.utils.validation','sklearn.utils.weight_vector','scipy.sparse.csgraph._validation','sklearn.utils.lgamma','FileDialog', 
          'scipy.special._ufuncs_cxx','scipy','matplotlib','pylab','FileDialog', 'scipy.integrate', 'scipy.special.*','scipy.linalg.*','matplotlib.backends.backend_tkagg','wordcloud'] 
     } 
    } 
) 

Cela fera py2exe ne pas créer le library.zip, puis-je copier-collé manuellement tous les fichiers requis dans le dossier wordcloud dans le dossier dist créé.

Cela a fonctionné maintenant.

+0

Vous pouvez ajouter ce copier/coller manuel dans e ci-dessus script après l'appel à installer :) –