Сборка прошла успешно, но код не работает, выбрасывая ImportError
Моя проблема мало отличается от существующих на веб-сайте. Позвольте мне попытаться выделить это подробно. У меня есть этот код, чтобы сделать некоторые заговоры, читая указанный файл.txt. Я собирался построить его так же, как и раньше. Мой setup.py должен делать эту работу. Содержание setup.py здесь
Как вы можете заметить, у меня нет ни одного пакета, связанного с tkinter, в обоих моих вышеуказанных файлах. я сделал python setup.py build
в терминале, и это выполнено хорошо. Но я не могу использовать мой фактический код с командным скриптом Windows
build\\exe.win-amd64-3.5\\draw_precision_recall_curve.exe D:\dataset\Fire_Smoke\Train\filelist.txt
pause
Это бросает этот след:
Traceback (most recent call last):
File "C:\python354\lib\site-packages\cx_Freeze\initscripts\__startup__.py", line 14, in run
module.run()
File "C:\python354\lib\site-packages\cx_Freeze\initscripts\Console.py", line 26, in run
exec(code, m.__dict__)
File "draw_precision_recall_curve.py", line 3, in <module>
import matplotlib.pyplot as plt
File "C:\python354\lib\site-packages\matplotlib\pyplot.py", line 115, in <module>
_backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
File "C:\python354\lib\site-packages\matplotlib\backends\__init__.py", line 62, in pylab_setup
[backend_name], 0)
File "C:\python354\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 4, in <module>
from . import tkagg # Paint image to Tk photo blitter extension.
File "C:\python354\lib\site-packages\matplotlib\backends\tkagg.py", line 5, in <module>
from six.moves import tkinter as Tk
File "C:\python354\lib\site-packages\six.py", line 92, in __get__
result = self._resolve()
File "C:\python354\lib\site-packages\six.py", line 115, in _resolve
return _import_module(self.mod)
File "C:\python354\lib\site-packages\six.py", line 82, in _import_module
__import__(name)
ImportError: No module named 'tkinter'
Я не смог решить эту проблему, глядя на соответствующие сообщения здесь и там. Любая помощь приветствуется.
1 ответ
Вы не можете использовать tkinter
, но вы используете matplotlib
и использует tkinter
,
По факту, matplotlib
дает вам выбор бэкэндов. Но IIRC, по умолчанию tkinter
(или, может быть TkAgg
, который использует tkinter
) в Windows, если вы не установили необязательный установленный родной бэкэнд Win32, и всегда в не-Mac Unix.
Так:
- Если вы используете только
matplotlib
не графически - например, чтобы генерировать файлы для сохранения - явно указывать неинтерактивный бэкэнд. - Если вы используете его для отображения графиков, вам нужно либо связать
tkinter
в вашем приложении или выберите другой интерактивный бэкэнд и включите его в свое приложение.
Например, допустим, вы просто хотите сгенерировать несколько графиков в виде файлов PNG. Вместо того, чтобы делать это по умолчанию TkAgg
бэкэнд, вы можете использовать AGG
неинтерактивный бэкэнд, например:
import matplotlib
matplotlib.use('AGG')
import matplotlib.pyplot as plt