带有 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”