2017-01-20 2 views
0

J'essaie de créer un fichier .exe à partir d'un script en utilisant py2exe (WinPython 3.4.4 sous Windows 7). Dans ce script j'utilise différents backends du paquet matplotlib (Version 1.5.2). Toutes mes tentatives ont donné l'erreur:Erreur d'importation relative/profondeur de récursivité maximale dépassée avec py2exe en utilisant matplotlib

... name = self._resolve_name(name, package, level) File "M:\Python\WinPython-32bit-3.4.4.4Qt5b1\python-3.4.4\lib\site-packages\py2exe\mf3.py", line 213, in _resolve_name raise ValueError('attempted relative import beyond top-level package') ValueError: attempted relative import beyond top-level package

Avec d'autres paquets, qui sont sur le même niveau de répertoire que matplotlib, il n'y a pas de problème. J'ai lu tous les messages concernant ce sujet, mais je n'ai pas encore trouvé de solution (y compris pyinstaller). Quelqu'un peut-il m'aider?

"setup.py":

from distutils.core import setup 
import py2exe 
import matplotlib 

setup(console=['skript.py'], 
options={ 
    "py2exe":{ 
      "packages": ['matplotlib.pyplot','matplotlib.backends.backend_pdf'], # List of all the modules you want to import 
      } 
     }, 
data_files=matplotlib.get_py2exe_datafiles(),   
) 

MISE À JOUR je maintenant installé version matplotlib 2.0.0. J'importe les paquets dans mon script avec

from matplotlib import pyplot, dates 
from matplotlib.backends.backend_pdf import PdfPages 
from matplotlib.ticker import MaxNLocator 

L'exécution du script dans spyder fonctionne bien. Le message d'erreur lors de l'utilisation de py2exe est maintenant remplacé par:

File "M:\Python\WinPython-32bit-3.4.4.4Qt5b1\python-3.4.4\lib\site-packages\py2exe\hooks.py", line 291, in getattr self.__finder.safe_import_hook(renamed, caller=self) RuntimeError: maximum recursion depth exceeded

Répondre

0

Il semble que vous utilisiez py2exe dans le mauvais sens.

Vous devez d'abord avoir un script Python sunning que vous voulez convertir en exe, disons que vous l'appelez script01.py.

Puis en script01.py faire

import matplotlib.pyplot as plt 

Et alors vous écrivez un script setup.py pour convertir sctipy01.py exe ​​comme celui-ci, sous sa forme la plus simple:

from distutils.core import setup 
import py2exe 

setup(console=['script01.py']) 
+0

qui est exactement ce que je l'ai fait et ce qui fonctionne sans utiliser matplotlib. L'exécution de script.py dans spyder fonctionne également (à partir de pplplot d'importation matplotlib, dates de matplotlib.backends.backend_pdf import PdfPages de matplotlib.ticker import MaxNLocator). Mais quand j'utilise py2exe, la compilation échoue. – kujone