pyinstaller 打包 tkinter 运行无反应解决

【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!】
这是一个python写的工具,我尝试使用最新的pyinstaller进行打包成一个独立的exe文件,使用的命令是 "pyinstaller -F -w excel关键词支持正则批量替换工具.py",但是打包后的程序双击后没有任何反应,看进程是存在的,但是似乎又自动结束了。
你的 Python 脚本是一个带 GUI 界面的 Tkinter 应用,并且涉及到 pandas
、openpyxl
、xlrd
等库。打包后运行时没有反应,可能有以下几个原因:
可能的原因:
-
缺少依赖库:
- 你需要确保 PyInstaller 在打包时正确包含了
pandas
、openpyxl
、xlrd
、tkinter
等所有依赖。 - 你可以使用
pip list
检查已安装的库,并确保在打包时没有被遗漏。
- 你需要确保 PyInstaller 在打包时正确包含了
-
PyInstaller 打包 Tkinter GUI 需要额外参数:
-w
选项会隐藏命令行窗口,但如果程序报错,错误信息无法看到,可能程序因异常崩溃。- 试试不加
-w
,或者加--console
,让错误信息显示出来: - 你也可以手动运行
dist/excel关键词支持正则批量替换工具.exe
通过命令行来查看可能的错误信息。
-
PyInstaller 可能遗漏了 Tkinter 相关的资源文件:
- 你可以尝试强制包含
tkinter
相关模块:
- 你可以尝试强制包含
-
文件路径问题:
- 你的代码涉及到
filedialog.askopenfilename()
和filedialog.asksaveasfilename()
,如果Tk
界面未正确初始化,可能会导致崩溃。 - 你可以尝试在
main.py
开头加上:
- 你的代码涉及到
-
尝试排查错误:
- 你可以使用
--debug
选项来看看是否有错误信息: - 也可以加上
--log-level=DEBUG
让 PyInstaller 输出更详细的日志:
- 你可以使用
解决方法:
- 先试试不加
-w
,运行看看是否有报错: - 在命令行运行
dist/excel关键词支持正则批量替换工具.exe
,看看是否有错误信息。 - 试试
--hidden-import=tkinter
或--debug
选项。
当我去掉-w后,运行程序提示: "Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.2.dll"
这是因为 pandas
依赖的 numpy
需要 Intel MKL (Math Kernel Library),但 PyInstaller 在打包时没有正确包含相关的动态链接库 (mkl_intel_thread.2.dll
等)。
解决方法
方法 1:确保 PyInstaller 包含 MKL 相关 DLL
PyInstaller 有时候不会自动包含 Intel MKL 相关的动态库,需要手动指定。
-
运行下面的命令,查看
numpy
依赖的 MKL 库的路径:检查输出,看是否使用 MKL 加速,如果是,则需要包含 MKL 相关的 DLL。
-
使用
pyinstaller
时添加hidden-import
以及手动包含 MKL 相关的库:其中
C:\Path\To\Python
替换为你 Python 的安装路径。 -
如果不确定
mkl_intel_thread.2.dll
在哪里,可以运行:然后手动找到
.libs
文件夹,把里面的.dll
复制到你的dist
目录下。
如果你需要 MKL
- 手动查找
mkl_intel_thread.2.dll
并添加: - 如果还报错,检查
mkl_core.dll
是否也缺失,并添加它:
如果你不需要 MKL
- 安装 OpenBLAS 版本的
numpy
,这样就不会依赖 MKL: - 然后打包:
最终解决方案:
pyinstaller -F --clean --hidden-import=tkinter --collect-submodules=tkinter --add-binary "C:\完整路径\mkl_intel_thread.2.dll;." --add-binary "C:\完整路径\mkl_core.dll;." excel关键词支持正则批量替换工具.py
先写入命令:
pyarmor cfg pack:pyi_options=" -F -w --hidden-import=tkinter --exclude-module=scipy --exclude-module=matplotlib --add-binary \"D:\anaconda3\Library\bin\mkl_intel_thread.2.dll;.\""
然后执行加密打包:
pyarmor gen --pack onefile excel关键词支持正则批量替换工具.py
布施恩德可便相知重
微信扫一扫打赏
支付宝扫一扫打赏