生成成功,但代码不工作,抛出ImportE

2024-03-29 12:48:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题与网络上现有的问题没有什么不同。我来详细强调一下。我有this代码,可以通过读取指定的.txt文件来进行打印。我打算像以前一样建造它。我的setup.py应该可以完成这项工作。setup.py的内容是here

如你所见,在我的上述两个文件中,我没有任何与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'

我没有办法解决这个问题,看看这里和那里的相关职位。 感谢您的帮助


Tags: inpyimportmatplotlibtkinterlibpackagessetup
1条回答
网友
1楼 · 发布于 2024-03-29 12:48:59

您可能没有使用tkinter,但是您正在使用matplotlib,并且它使用tkinter

实际上,matplotlib给你a choice of backends。但是IIRC,默认值是tkinter(或者可能是TkAgg,它使用tkinter),如果您没有安装可选的Win32本机后端,并且总是在非Mac Unix上

所以:

  • 如果您只使用matplotlib非图形化方式(例如,生成要保存的文件),请显式指定一个非交互式后端
  • 如果你用它来显示图表,你要么需要在你的应用程序中绑定tkinter,要么选择一个不同的交互后端,并在你的应用程序中绑定

例如,假设您只想生成一堆图形作为PNG文件。您可以使用AGG非交互式后端,而不是通过默认的TkAgg后端执行此操作,如下所示:

import matplotlib
matplotlib.use('AGG')
import matplotlib.pyplot as plt

相关问题 更多 >