Сборка прошла успешно, но код не работает, выбрасывая 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
Другие вопросы по тегам