Python 构建成功,但代码没有';我不工作,我害怕

Python 构建成功,但代码没有';我不工作,我害怕,python,tkinter,build,site-packages,Python,Tkinter,Build,Site Packages,我的问题与网络上现有的问题没有什么不同。让我试着详细强调一下。我有一些代码可以通过读取指定的.txt文件来进行打印。我打算像以前一样建造它。我的setup.py应该可以完成这项工作。setup.py的内容是 正如您所观察到的,我在上述两个文件中都没有任何与tkinter相关的包。我在terminal中编写了python setup.py build,它执行得很好。但无法将实际代码与windows命令脚本一起使用 build\\exe.win-amd64-3.5\\draw_precision_r

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

正如您所观察到的,我在上述两个文件中都没有任何与tkinter相关的包。我在terminal中编写了
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'
回溯(最近一次呼叫最后一次):
文件“C:\python354\lib\site packages\cx\u Freeze\initscripts\uuuuuu startup\uuuuuu.py”,第14行,正在运行
module.run()
文件“C:\python354\lib\site packages\cx\u Freeze\initscripts\Console.py”,第26行,正在运行
执行官(代码、指令)
文件“draw\u precision\u recall\u curve.py”,第3行,在
将matplotlib.pyplot作为plt导入
文件“C:\python354\lib\site packages\matplotlib\pyplot.py”,第115行,在
_后端模块、新图形管理器、绘图(如果交互式),显示=pylab\u设置()
pylab_设置中的文件“C:\python354\lib\site packages\matplotlib\backends\\uuuu init\uuuu.py”,第62行
[后端名称],0)
文件“C:\python354\lib\site packages\matplotlib\backends\backend\backend\u tkagg.py”,第4行,在
从…起将tkagg#绘制图像导入Tk photo blitter扩展。
文件“C:\python354\lib\site packages\matplotlib\backends\tkagg.py”,第5行,在
从六点开始,将tkinter作为Tk导入
文件“C:\python354\lib\site packages\six.py”,第92行,在__
结果=自我解决()
文件“C:\python354\lib\site packages\six.py”,第115行,在
返回导入模块(self.mod)
文件“C:\python354\lib\site packages\six.py”,第82行,在导入模块中
__导入(名称)
ImportError:没有名为“tkinter”的模块
我没有办法解决这个问题,看看这里和那里的相关帖子。
非常感谢您的帮助。

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

事实上,
matplotlib
为您提供了。但是IIRC,默认值是Windows上的
tkinter
(或者可能是
TkAgg
,它使用
tkinter
),如果您没有安装可选的Win32本机后端,并且始终在非Mac Unix上安装

因此:

  • 如果您仅使用非图形化的
    matplotlib
    来生成要保存的文件,请明确指定非交互式后端
  • 如果您使用它来显示图形,您需要在应用程序中捆绑
    tkinter
    ,或者选择不同的交互式后端并将其捆绑到应用程序中
例如,假设您只想生成一组图形作为PNG文件。您可以使用
AGG
非交互式后端,而不是通过默认的
TkAgg
后端执行此操作,如下所示:

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

谢谢你,我更新了你之前提到的六和cx_冻结。我查了你提供的链接,说实话,我不清楚我该怎么做。我正在使用
matplotlib
打开并保存一个
png
格式,因此我添加了
import matplotlib matplotlib.use('Agg')
并删除了
import matplotlib.pyplot as plt
,但它没有弹出一个显示我以前看到的图形的窗口。请更正me@voo_doo我不知道如何更清楚地解释这一点,但我会再试一次:如果不想显示任何图形,则只能使用非交互式后端。如果你确实想显示图形,你必须选择一个图形后端并将其与你的应用程序捆绑在一起。谢谢,我错过了非图形部分。很抱歉让我尝试一下,对于任何与cx_freeze有类似问题的人,我会推荐@voo_doo所述的pyinstaller,但另一方面,
cx_freeze
通常是跨平台支持的最佳选择(例如:一旦事情成功,至少在三大平台上,它们通常是相同的)并跟上Python的变化。