J'essaie de convertir mon script .py en un exécutable à l'aide de py2exe. J'ai eu jusqu'à présent un certain nombre de problèmes qui ont été en grande partie résolus par les "options" dans le fichier d'installation ci-dessous. Mais maintenant, j'ai un problème pour lequel je n'ai pas pu trouver de solution, et je me demande si d'autres personnes ont eu ce même problème et l'ont corrigé.
Lorsque j'exécute le fichier d'installation ci-dessous à l'aide de "python setup.py py2exe", il me donne un fichier exécutable, mais lorsque je l'exécute, il se plaint "Aucun module nommé Builtins".
Le seul autre article que j'ai pu trouver sur ce sujet indique que les commandes intégrées sont une chose de python3, mais que je suis sous 2.7.
Appréciez les conseils ou astuces à ce sujet.
from distutils.core import setup
import py2exe
from distutils.filelist import findall
import os
import matplotlib
matplotlibdatadir = matplotlib.get_data_path()
matplotlibdata = findall(matplotlibdatadir)
setup(
console=['DET14.py'],
options={
'py2exe': {
'packages' : ['matplotlib', 'pytz'],
'dll_excludes':['MSVCP90.DLL',
'libgdk-win32-2.0-0.dll',
'libgobject-2.0-0.dll',
'libgdk_pixbuf-2.0-0.dll'],
'includes':['scipy.sparse.csgraph._validation',
'scipy.special._ufuncs_cxx']
}
},
# data_files=matplotlibdata_files
data_files=matplotlib.get_py2exe_datafiles()
)
Voici la liste complète de ce à quoi ressemble le message d'erreur:
J'ai finalement eu ce travail. Il s’est avéré que le fichier d’installation d’origine contenait des erreurs, dont certaines étaient purement stupides, et d’autres ont simplement corrigé mon incompréhension du fonctionnement des paramètres de la commande d’installation. J'ajouterai que cette dernière catégorie d'erreurs n'a été résolue que par des tentatives de frappe à la Shelock Holmes et par de vieux essais et erreurs. J'entends par là que je n'ai toujours pas trouvé de documentation indiquant la signification et l'utilisation des paramètres de la commande setup. Si quelqu'un a cette information et peut la transmettre, cela sera très apprécié.
Avec comme arrière-plan, voici la réponse:
Il y avait 2 problèmes de base:
La liste des paquets dans le fichier d'installation ci-dessus était terriblement incomplète. Je ne suis toujours pas sûr que la règle stipule que vous devez répertorier tous les paquetages sur lesquels votre programme s'appuie, ainsi que sur ceux sur lesquels il peut compter et dont vous ne connaissiez pas l'existence (par exemple, pytz, par exemple ...). Mais quand j'ai fait cela, j'avais quelque chose à ce moment-là que je pourrais éventuellement me rendre au travail.
Le message d'erreur dans la question initiale ci-dessus ressemble en quelque sorte à ce que mon programme dépendait d'un élément appelé "patsy", et cela m'a confondu car je ne savais pas ce que c'était, mais il se trouve que les stats modèles (qui sont au cœur de mon projet ) dépend de patsy, il devait donc être inclus dans la liste "packages".
Vous trouverez ci-dessous le fichier d'installation qui a fini par fonctionner. J'espère que cette description de la logique du correctif s'avère utile pour les autres personnes confrontées au même type de problème.
from distutils.core import setup
import py2exe
from distutils.filelist import findall
import os
import matplotlib
matplotlibdatadir = matplotlib.get_data_path()
matplotlibdata = findall(matplotlibdatadir)
setup(
console=['DET14.py'],
options={
'py2exe': {
'packages' : ['matplotlib', 'pytz','easygui',\
'statsmodels','pandas','patsy'],
'dll_excludes':['MSVCP90.DLL',
'libgdk-win32-2.0-0.dll',
'libgobject-2.0-0.dll',
'libgdk_pixbuf-2.0-0.dll'],
'includes':['scipy.sparse.csgraph._validation',
'scipy.special._ufuncs_cxx']
}
},
data_files=matplotlib.get_py2exe_datafiles()
)
J'ai également constaté que l'utilisation de 'pip install future' Résolvait ce problème
J'ai eu les informations à partir d'ici: https://askubuntu.com/questions/697226/importerror-no-module-named-builtins
J'espère que cela clarifie les choses pour d'autres utilisateurs, comme moi, qui sont tombés sur votre question
L'exécution de pip install future
a corrigé cette erreur pour moi . Pour assurer la compatibilité avec Python2.7, le package future devrait être ajouté à install_requires dans setup.py.
Notez que nosetests
échoue également sans matplotlib, mais je ne suis pas sûr que l'ajout de matplotlib en tant que dépendance a beaucoup de sens.