2017-01-20 2 views
0

Я пытаюсь создать .exe-файл из скрипта с помощью py2exe (WinPython 3.4.4 в Windows 7). В этом скрипте я использую разные бэкэнды пакета matplotlib (версия 1.5.2). Все мои попытки привели с ошибкой:Ошибка относительного импорта/максимальная глубина рекурсии с py2exe с использованием 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

С другими пакетами, которые находятся на одной и той же директории уровня как Matplotlib, нет никаких проблем. Я прочитал все сообщения, касающиеся этой темы, но пока не смог найти решение (включая pyinstaller). Кто-нибудь может мне помочь?

"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(),   
) 

UPDATE теперь я установил Matplotlib версию 2.0.0. Я импортирую пакеты в свой скрипт с

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

Запуск скрипта в шпионере работает хорошо. Сообщение об ошибке при использовании py2exe теперь изменилось на:

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

ответ

0

Кажется, вы используете py2exe неправильно.

Прежде всего вам нужно иметь скрипт для солнечного питона, который вы хотите преобразовать в exe, например, вы называете его script01.py.

Тогда в script01.py сделать

import matplotlib.pyplot as plt 

И затем вы пишете setup.py скрипт для преобразования sctipy01.py в EXE, как это, в самом простом виде:

from distutils.core import setup 
import py2exe 

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

То есть именно то, что я сделал и что работает без использования matplotlib. Запуск скрипта.py в spyder также работает (из matplotlib import pyplot, даты из matplotlib.backends.backend_pdf импортировать PdfPages из matplotlib.ticker import MaxNLocator). Но когда я использую py2exe, компиляция терпит неудачу. – kujone

Смежные вопросы