带有 tkinter xgboost 的 cxfreeze 小部件未显示但没有错误

Posted

技术标签:

【中文标题】带有 tkinter xgboost 的 cxfreeze 小部件未显示但没有错误【英文标题】:cxfreeze widget with tkinter xgboost not showing but no error 【发布时间】:2018-05-30 21:51:35 【问题描述】:

我的程序在 anaconda spyder 中运行。然而,在冻结它之后,所有使用 tkinter 模块的小部件都可以工作,除了带有 xgboost 和 pandas 的小部件。没有显示错误,构建工作但按钮不工作并且不显示小部件。

我已经尝试在我的 setup.py 文件中导入并包含 xgboost,但所有其他带有 tkinter 的小部件都不能完全正常工作。仍然没有错误。有没有人经历过或解决过这个问题?

这是最接近有效的方法。这是我的 setup.py,当其他小部件使用 tkinter 而不是使用 xgboost 和 pandas 时。

from cx_Freeze import setup, Executable
import sys
import os

includes = []
include_files = [r"C:/Users/USER/Anaconda3/DLLs/tcl86t.dll",
         r"C:/Users/USER/Anaconda3/DLLs/tk86t.dll",
         r"C:/Users/USER/SAMPLE/xgboost_USE.model",
         r"C:/Users/USER/SAMPLE/P1.ico"]
os.environ['TCL_LIBRARY'] = "C:/Users/USER/Anaconda3/tcl/tcl8.6"
os.environ['TK_LIBRARY'] = "C:/Users/USER/Anaconda3/tcl/tk8.6"
base = 'Win32GUI' if sys.platform == 'win32' else None


setup(name=application_title, version='1.0', description='SAMPLE',
      options="build_exe": "includes": includes, "include_files":                 
      include_files,executables=
      [Executable(r'C:/Users/USER/SAMPLE/sample.py', base=base)])

请帮忙。

【问题讨论】:

尝试通过终端运行您的应用程序,这将显示任何错误。能否请您提及您正在开发的平台。 我正在使用 python。当我在那里运行主程序但冻结其中一个小部件后没有显示时,anaconda python 控制台中没有错误。带有 xgboost 的那个。 【参考方案1】:

我对 xgboost 没有任何经验,但我知道当你 cx freeze pandas 时,你需要明确包含 numpy.我将分享一个我拥有的带有 pandas 的设置文件(还有一些其他的东西你可以删除,比如我假设的 boto)

import sys
import cx_Freeze
import os.path
import scipy

base = None

if sys.platform == 'win32':
    base = "Win32GUI"

#This part may depend on where your installation is
#This part is essential to copy the tkinter DLL files over
PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tcl8.6')
os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tk8.6')
os.environ['REQUESTS_CA_BUNDLE'] = r'C:\ProgramData\Anaconda3\Lib\site-packages\botocore\vendored\requests\cacert.pem'


executables = [cx_Freeze.Executable("test.py", base=base)]
addtional_mods = ['numpy.core._methods', 'numpy.lib.format']

packages = ["idna", "numpy", "boto3", 'boto3.s3.transfer', 'boto3.s3.inject', 'multiprocessing', "xlwt", 'numpy.core._methods', 'pandas']
options = 
    'build_exe': 

        'include_files':[
            os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'),
            os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll'),
            os.path.dirname(scipy.__file__),
            r'C:\ProgramData\Anaconda3\Lib\site-packages\botocore\vendored\requests\cacert.pem',
            r'C:\ProgramData\Anaconda3\Lib\site-packages\botocore',

         ],
        'includes': addtional_mods,
        'packages':packages,
    ,



cx_Freeze.setup(
    name = "Test",
    options = options,
    version = "1.0.0.0",
    description = 'Test',
    executables = executables
)

【讨论】:

谢谢。我将 xgboost 添加为一个包,但它找不到该模块。另外,我在想,即使 xgboost 不工作,小部件也必须显示。但我已经将 tkinter 与我的其他小部件一起使用,它工作得很好。我不知道该怎么办了。 我也在我的主程序中使用过#from pandas.api.types import CategoricalDtype# 除了 setup.py 中的包中的#pandas# 之外,这是否需要明确包含? 在尝试冻结它时找不到 xgboost 肯定是个问题。至于熊猫,我想只要你有熊猫和我添加的与 numpy 相关的东西,比如 addtional_mods = ['numpy.core._methods', 'numpy.lib.format'] 和 packages = ['numpy', 'numpy. core._methods', 'pandas'] 它应该可以工作。 我尝试搜索 xgboost 和 cx_freeze 但没有找到太多。我遇到过安装未包装的鸡蛋和 cx freeze 不喜欢这样的问题。有时对该模块进行 pip install 升级会有所帮助。

以上是关于带有 tkinter xgboost 的 cxfreeze 小部件未显示但没有错误的主要内容,如果未能解决你的问题,请参考以下文章

带有 XGBoost 的 Sklearn GridSearchCV - 可能不使用参数 cv

带有“early_stopping_rounds”的 xgboost 的 cross_val_score 返回“IndexError”

使用 CPU 工作人员进行数据处理,并使用带有 dask 的 GPU 工作人员训练 xgboost

带有网格的 tkinter 画布滚动条?

如何在 Tkinter 中创建带有标签的超链接?

带有可变参数的回调函数 tkinter 按钮