A-A+

pyinstaller 打包 tkinter 运行无反应解决

2025年03月04日 13:26 学习笔记 暂无评论 共2816字 (阅读89 views次)

【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!】

这是一个python写的工具,我尝试使用最新的pyinstaller进行打包成一个独立的exe文件,使用的命令是 "pyinstaller -F -w excel关键词支持正则批量替换工具.py",但是打包后的程序双击后没有任何反应,看进程是存在的,但是似乎又自动结束了。

你的 Python 脚本是一个带 GUI 界面的 Tkinter 应用,并且涉及到 pandasopenpyxlxlrd 等库。打包后运行时没有反应,可能有以下几个原因:

可能的原因:

  1. 缺少依赖库

    • 你需要确保 PyInstaller 在打包时正确包含了 pandasopenpyxlxlrdtkinter 等所有依赖。
    • 你可以使用 pip list 检查已安装的库,并确保在打包时没有被遗漏。
  2. PyInstaller 打包 Tkinter GUI 需要额外参数

    • -w 选项会隐藏命令行窗口,但如果程序报错,错误信息无法看到,可能程序因异常崩溃。
    • 试试不加 -w,或者加 --console,让错误信息显示出来:
      pyinstaller -F excel关键词支持正则批量替换工具.py --console
    • 你也可以手动运行 dist/excel关键词支持正则批量替换工具.exe 通过命令行来查看可能的错误信息。
  3. PyInstaller 可能遗漏了 Tkinter 相关的资源文件

    • 你可以尝试强制包含 tkinter 相关模块:
      pyinstaller -F --hidden-import=tkinter excel关键词支持正则批量替换工具.py
  4. 文件路径问题

    • 你的代码涉及到 filedialog.askopenfilename()filedialog.asksaveasfilename(),如果 Tk 界面未正确初始化,可能会导致崩溃。
    • 你可以尝试在 main.py 开头加上:
      import os
      import sys
      if getattr(sys, 'frozen', False):
      os.chdir(sys._MEIPASS) # 让 PyInstaller 运行时能找到资源文件
  5. 尝试排查错误

    • 你可以使用 --debug 选项来看看是否有错误信息:
      pyinstaller -F --debug excel关键词支持正则批量替换工具.py
    • 也可以加上 --log-level=DEBUG 让 PyInstaller 输出更详细的日志:
      pyinstaller -F --log-level=DEBUG excel关键词支持正则批量替换工具.py

解决方法:

  • 先试试不加 -w,运行看看是否有报错:
    pyinstaller -F excel关键词支持正则批量替换工具.py
  • 在命令行运行 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 相关的动态库,需要手动指定。

  1. 运行下面的命令,查看 numpy 依赖的 MKL 库的路径:

    import numpy
    numpy.show_config()

    检查输出,看是否使用 MKL 加速,如果是,则需要包含 MKL 相关的 DLL。

  2. 使用 pyinstaller 时添加 hidden-import 以及手动包含 MKL 相关的库:

    pyinstaller -F --hidden-import=numpy --hidden-import=scipy --add-binary="C:\Path\To\Python\Lib\site-packages\numpy\.libs\*;." excel关键词支持正则批量替换工具.py 尽量不要用这种*的方式,会把文件打包的太大。

    其中 C:\Path\To\Python 替换为你 Python 的安装路径。

  3. 如果不确定 mkl_intel_thread.2.dll 在哪里,可以运行:

    import os
    import numpy
    print(os.path.dirname(numpy.__file__))

    然后手动找到 .libs 文件夹,把里面的 .dll 复制到你的 dist 目录下。

 

如果你需要 MKL

  1. 手动查找 mkl_intel_thread.2.dll 并添加
    pyinstaller -F --clean --hidden-import=tkinter --collect-submodules=tkinter --add-binary "C:\完整路径\mkl_intel_thread.2.dll;." excel关键词支持正则批量替换工具.py
  2. 如果还报错,检查 mkl_core.dll 是否也缺失,并添加它
    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

如果你不需要 MKL

  • 安装 OpenBLAS 版本的 numpy,这样就不会依赖 MKL:
    pip uninstall numpy
    pip install numpy --no-binary=:all:
  • 然后打包
    pyinstaller -F --clean --hidden-import=tkinter --collect-submodules=tkinter excel关键词支持正则批量替换工具.py

 

最终解决方案:

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

布施恩德可便相知重

微信扫一扫打赏

支付宝扫一扫打赏

×

给我留言