cx_freeze 错误:找不到模块 tkinter

Posted

技术标签:

【中文标题】cx_freeze 错误:找不到模块 tkinter【英文标题】:cx_freeze Error: Module not found tkinter 【发布时间】:2020-03-10 14:01:58 【问题描述】:

我开始遇到 miniconda 和 PyCharm 的一些问题,所以我不得不重新安装它们。但是,现在当我使用 cx_freeze 创建 .exe 时,出现以下错误。

这是我的代码:

from tkinter import *
from tkinter import ttk
from ttkthemes import ThemedTk
from ttkthemes import themed_tk as tk
import os
from tkinter import messagebox
import getpass
import pyodbc
import test
import time



class Application(object):
    def __init__(self,master):
        self.master=master

        self.itemIn = ttk.Button(master, text="In", width=35,
                                 command=self.itemIn).grid(row=2, column=0, padx=10,pady=15)
        self.itemOut = ttk.Button(master, text="Out", width=35,
                                       command=self.itemOut).grid(row=3, column=0, padx=10)

    def itemIn(self):
        pass
    def itemOut(self):
        pass

def main():
    global userList
    strForDB = os.getcwd() + '\DBINFO.txt'
    openDBFile = open(strForDB, 'r')
    currentDirForDB = openDBFile.read()
    openDBFile.close()
    dbPath = currentDirForDB
    conToSubmit = pyodbc.connect(dbPath)
    curToSubmit = conToSubmit.cursor()
    userName = getpass.getuser()

    root = tk.ThemedTk()
    root.get_themes()
    root.set_theme("radiance")
    app=Application(root)
    root.title("Main Menu v:5.1")
    root.configure(background="#F4F3F1")
    root.resizable(0, 0)
    # Change Application Icon with below:
    root.wm_iconbitmap(os.getcwd()+'/Z Logo.ico')
    ### To maximize
    # w, h = root.winfo_screenwidth(), root.winfo_screenheight()
    # root.geometry("%dx%d+0+0" % (w, h))
    root.geometry('340x510+300+80')
    root.mainloop()
    #else:
    #    messagebox.showerror("Access Denied", "You are not allowed to access this application.")
    #    return


if __name__=='__main__':
    main()

这是 cx_freeze 构建脚本,我已经在其中导入了所有相关模块。

import cx_Freeze
import os
from cx_Freeze import *
import sys
if sys.platform == "win32":
     base = "Win32GUI"

imodules=['tkinter','pyodbc','getpass','pathlib','openpyxl','datetime','os','win32print','win32ui'] #modules to include

emodules=[] ###modules to NOT include
            #(useful if a module is forcefully installed
            #even if you don't want that module)



build_exe_options="packages":imodules,"excludes":emodules

setup(
        name= "WMS System",
        options="build_exe":build_exe_options,description="App to track Inventory",author="VM",
        executables=[
        Executable(
                 "WMS.py", base=base, icon="Z logo.ico"
                )
            ]
        )


我使用 cx_freeze 已经有一段时间了,但我从未见过这个错误。

【问题讨论】:

你能告诉我们你的 cx_Freeze 构建脚本吗? 我看到你在使用 anaconda;这对 tkinter 有什么不同的处理吗?您认为 cx_freeze 脚本中的 _tkinterTkinter 可能有帮助吗? 我会试试的。我还发现 Anaconda 无法识别 tkinter 的 import *。 那行不通。 【参考方案1】:

我遇到了和你一样的问题,经过长时间的故障排除后我发现

在我构建的 /lib 文件夹中,我有“Tkinter”文件夹,将其重命名为“tkinter”解决了上述问题 以下任何未找到类型模块的错误都可以通过将它们添加到构建选项的“包含”标签或自己从 python 安装文件夹中查找并复制整个模块文件夹来解决

【讨论】:

它被命名为“Tkinter”的任何原因? 我的赌注是 cx_freeze 在复制时更改它,因为在 python lib 文件夹中只有“tkinter”存在。 这很奇怪。我的一个应用程序没有这样做,并且 exe 运行良好。但是,在我使用相同 python 版本的其他应用程序中,由于某种原因,设置用大写 T 命名文件夹。这会导致我遇到同样的问题。【参考方案2】:

项目中的文件夹名称必须是"lib/tkinter",但也可能是"lib/Tkinter",那么你必须从"Tkinter"重命名文件夹到“tkinter”。

【讨论】:

以上是关于cx_freeze 错误:找不到模块 tkinter的主要内容,如果未能解决你的问题,请参考以下文章

使用 cx_freeze 构建的 Exe 会为所需的包产生“找不到模块”错误

Python 3.3.4 Cx_Freeze ImportError: DLL load failed: 找不到指定的模块

找不到模块'cx_Freeze__init__'

Cx_Freeze 找不到 pkg_resources/*.*'

cx_Freeze:找不到文件/目录 icon.gif

cx_Freeze 应用程序找不到 tk.tcl