Я сделал приложение, которое использует 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 все еще отсутствуют элементы?