Как вы используете py2app с matplotlib?

Я сделал приложение, которое использует matplotlib для отображения графика в окне tkinter. Я хочу создать отдельное приложение и пытаюсь использовать как py2app, так и cx_freez, но оба сталкиваются с проблемой при попытке скомпилировать программу. Я считаю, что проблема как-то связана с matplotlib, потому что, когда я намеренно отключу импорт для этого модуля, а затем скомпилирую, приложение запустится и выйдет из строя только до тех пор, пока не встретит код, требующий matplotlib. Я не уверен, исключаю ли я что-то из своего файла setup.py. Я пытался использовать часть кода здесь, но без особого успеха.

Когда я запускаю свой setup.py в терминале:

from setuptools import setup

setup(
    app=["Calculator.py"],
    setup_requires=["py2app"]
)

Это ошибка, которую я получаю в терминале после его компиляции:

Traceback (most recent call last):
  File "setup.py", line 7, in <module>
    setup_requires=["py2app"]
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/core.py", line 148, in setup
    dist.run_commands()
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/dist.py", line 955, in run_commands
    self.run_command(cmd)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/dist.py", line 974, in run_command
    cmd_obj.run()
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/py2app/build_app.py", line 659, in run
    self._run()
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/py2app/build_app.py", line 865, in _run
    self.run_normal()
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/py2app/build_app.py", line 959, in run_normal
    self.create_binaries(py_files, pkgdirs, extensions, loader_files)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/py2app/build_app.py", line 1214, in create_binaries
    platfiles = mm.run()
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/macholib/MachOStandalone.py", line 105, in run
    mm.run_file(fn)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/macholib/MachOGraph.py", line 84, in run_file
    self.scan_node(m)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/macholib/MachOGraph.py", line 110, in scan_node
    m = self.load_file(filename, caller=node)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/macholib/MachOGraph.py", line 93, in load_file
    newname = self.locate(name, loader=caller)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/macholib/MachOStandalone.py", line 23, in locate
    newname = super(FilteredMachOGraph, self).locate(filename, loader)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/macholib/MachOGraph.py", line 49, in locate
    loader=loader.filename)
TypeError: dyld_find() got an unexpected keyword argument 'loader'

Когда я пытаюсь запустить приложение, я получаю эту ошибку в консоли:

2015-07-21 22:17:55.588 Calculator[85122:57708133] Calculator Error
 Traceback (most recent call last):
   File "/Users/camon/Documents/Python Apps/Compiler/dist/Calculator.app/Contents/Resources/__boot__.py", line 81, in <module>
     _run()
   File "/Users/camon/Documents/Python Apps/Compiler/dist/Calculator.app/Contents/Resources/__boot__.py", line 62, in _run
     exec(compile(source, path, 'exec'), globals(), globals())
   File "/Users/camon/Documents/Python Apps/Compiler/dist/Calculator.app/Contents/Resources/Calculator.py", line 9, in <module>
     from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
   File "/Users/camon/Documents/Python Apps/Compiler/dist/Calculator.app/Contents/Resources/lib/python3.4/matplotlib/backends/backend_tkagg.py", line 7, in <module>
     from six.moves import tkinter_filedialog as FileDialog
   File "six.pyc", line 90, in __get__
   File "six.pyc", line 113, in _resolve
   File "six.pyc", line 80, in _import_module
 ImportError: No module named 'tkinter.filedialog'

Посмотрев на ошибки, я понял, что некоторые модули или другие вещи не добавляются в процессе компиляции. Что мне нужно добавить в файл setup.py? Или это то, что мне нужно решить с помощью matplotlib?

ТАКЖЕ... вот список всех модулей в моей программе:

import tkinter as tk
from tkinter import ttk
from math import *
import matplotlib
matplotlib.use("TkAgg")
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib import style
#from matplotlib import pyplot as plt
from matplotlib.figure import Figure
import random

РЕДАКТИРОВАТЬ:

Я узнал, что matplotlib нужно импортировать tkinter.filedialog и tkinter.messagebox. Как только я это сделал, приложение запустилось и заработало. Тем не менее, я все еще получаю ту же ошибку в терминале при его компиляции. В setup.py все еще отсутствуют элементы?


person Camon    schedule 22.07.2015    source источник
comment
Дубликат: stackoverflow.com/questions/31240052/   -  person Neapolitan    schedule 06.06.2016