python matplotlib库 打包成.exe

在打包一个含matplotlib库的程序后出现了问题。
运行时出现如图的报错

img

按网上的方法将numpy版本调整至mkl的版本

img


重新打包后依然是同样的报错。
打包的方式是在pycharm终端使用pyinstaller

pyinstaller main.py -p interface.py -p scrollableFrame.py -p windowSet.py -p Inst\Instruction.txt -p cSet\Settings.npy --hidden-import matplotlib

t matplotlib
在pycharm中运行是没有任何问题的。
求解答

引用new bing作答:
1 这个错误是由于打包后的程序找不到matplotlib依赖库中的path模块导致的。这可能是因为pyinstaller没有正确地将依赖项打包到可执行文件中。

您可以尝试在打包命令中添加 --add-data 选项,将 matplotlib 相关的文件夹和文件一起打包:

pyinstaller main.py -p interface.py -p scrollableFrame.py -p windowSet.py -p Inst\Instruction.txt -p cSet\Settings.npy --hidden-import matplotlib --add-data "C:\Python38\Lib\site-packages\matplotlib\mpl-data;mpl-data"

其中第一个路径表示 matplotlib 的 mpl-data 文件夹所在的路径,第二个参数是指定打包后的程序中存放该文件夹的位置(相对路径,以当前目录为基准)。

如果您在打包时使用了虚拟环境,则需要将路径替换为虚拟环境中 matplotlib 的 mpl-data 路径。

如果这个方法不能解决问题,您可以考虑使用其他的打包工具,例如 PyOxidizer、cx_Freeze 等来打包程序,或者尝试使用 conda 进行打包。

2 还有可能是由于打包过程中缺少一些依赖项所致。您可以尝试添加一些其他的隐藏导入,以确保所有依赖项都被正确地包含在打包文件中。此外,也可以尝试在打包过程中指定一些其他的选项。

以下是一些可能有用的选项和隐藏导入:

使用--hidden-import标志指定其他隐藏导入:

pyinstaller main.py --hidden-import matplotlib.backends.backend_qt5agg

指定数据文件和其他资源:

pyinstaller main.py --add-data "data.txt:data" --add-data "images/*.png:images"

使用--onefile标志生成单个可执行文件:

pyinstaller main.py --onefile

这可能会增加打包文件的大小,并增加启动时间。如果您的应用程序依赖于大量的外部资源或库,这可能会导致问题。

如果问题仍然存在,建议您检查您的环境和依赖项,确保您的Python环境和所有依赖项已正确安装,并且没有任何版本冲突或其他问题。您还可以尝试在不同的Python环境中运行打包文件,以检查是否存在环境问题。

该回答引用于ChatGPT:
根据您提供的信息,这个问题可能是因为 PyInstaller 无法正确处理 matplotlib 库中的动态链接库文件导致的。毕竟 matplotlib 中涉及到的库比较多,有些库需要根据操作系统不同而加载不同的版本。

您可以尝试使用以下命令来打包您的程序,并添加必要的选项:

pyinstaller main.py -p interface.py -p scrollableFrame.py -p windowSet.py -p Inst\Instruction.txt -p cSet\Settings.npy --hidden-import matplotlib --add-data "<path-to-mpl-data>;<relative-path>"

其中,<path-to-mpl-data> 是 matplotlib 库中 mpl-data 文件夹所在的绝对路径,<relative-path> 是您想要将该文件夹相对于可执行文件的路径。例如,如果您的 mpl-data 文件夹位于 C:\Python\Lib\site-packages\matplotlib\mpl-data,并且您希望它在可执行文件的根目录中可用,则应该将 <path-to-mpl-data> 设置为 "C:\Python\Lib\site-packages\matplotlib\mpl-data",将 <relative-path> 设置为 "mpl-data"

此外,您还可以尝试使用 --runtime-tmpdir 选项来指定运行时临时目录。这个选项会告诉 PyInstaller 在运行时将临时文件写入指定的目录,以便更好地支持 matplotlib 库。例如:

pyinstaller main.py -p interface.py -p scrollableFrame.py -p windowSet.py -p Inst\Instruction.txt -p cSet\Settings.npy --hidden-import matplotlib --add-data "<path-to-mpl-data>;<relative-path>" --runtime-tmpdir <path-to-tmp-dir>

其中,<path-to-tmp-dir> 是您想要将运行时临时文件存储的路径。

希望这些信息能够帮助到您解决问题。

嗯,

ImportError:DLL load failed while importing_path:找不到指定的模块。
【8872] Failed to execute script 'main'due to unhandled exception
报错含义:
导入错误:导入路径时DLL加载失败:找不到指定的模块。
由于未处理的异常,无法执行脚本“main”

参考下思路:
1、先在虚拟环境里面卸载numpy和scipy
2、安装从https://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy%E4%B8%8B%E8%BD%BD%E7%9A%84whl , pip install xxx.whl
3、再安装 scipy
4、重新打包程序

首先确保您安装了最新版本的numpy、matplotlib和pyinstaller。可以使用以下命令更新库:

pip install --upgrade numpy matplotlib pyinstaller

在创建打包命令时,确保添加--hidden-import参数以包含matplotlib相关的隐藏导入。您的命令应该如下所示:

pyinstaller main.py -p interface.py -p scrollableFrame.py -p windowSet.py -p Inst/Instruction.txt -p cSet/Settings.npy --hidden-import matplotlib --hidden-import 'matplotlib.backends.backend_tkagg'

注意:这里添加了--hidden-import 'matplotlib.backends.backend_tkagg',这将包含matplotlib的Tkinter后端。根据您使用的后端,这可能需要调整。
如果问题仍然存在,请尝试创建一个名为hook-matplotlib.py的文件,并将其放在pyinstaller的hooks文件夹中。您可以在pyinstaller安装目录下找到这个文件夹,例如:/Lib/site-packages/PyInstaller/hooks。在hook-matplotlib.py文件中,添加以下内容:

from PyInstaller.utils.hooks import collect_data_files

datas = collect_data_files('matplotlib')


这将确保matplotlib相关的数据文件被包含在打包过程中。
如果问题仍然存在,尝试使用--onedir选项创建一个目录形式的打包,而不是单个可执行文件。这可以帮助您更好地识别问题所在:

pyinstaller main.py -p interface.py -p scrollableFrame.py -p windowSet.py -p Inst/Instruction.txt -p cSet/Settings.npy --hidden-import matplotlib --hidden-import 'matplotlib.backends.backend_tkagg' --onedir

如果您发现使用--onedir可以成功运行程序,那么问题可能与pyinstaller将所有文件打包到单个可执行文件时的资源访问有关。
希望以上解决方案之一能帮助您解决问题。如果问题仍然存在,请提供更多关于错误的详细信息,以便我们更好地了解您的问题。

这种方式打包试试
http://t.csdn.cn/1HQrE

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:

这个问题可能由于打包后程序无法找到matplotlib依赖库导致的。可以尝试以下几个步骤来解决:

1. 确认打包时是否已经将matplotlib库打包进去。在使用pyinstaller命令时加上"--debug=all"参数,可以查看打包时的详细信息,确认是否已经正确打包进去。

2. 如果已经将matplotlib库打包进去,可以尝试在打包时加上"--hidden-import matplotlib.backends.backend_qt5agg"参数,强制打包matplotlib的Qt5Agg后端。

3. 如果还是无法解决问题,可以尝试在程序中手动添加以下代码,告诉程序使用matplotlib的Qt5Agg后端:

import matplotlib
matplotlib.use('Qt5Agg')


希望以上方法能够帮助你解决问题。如果还有其他问题,请在评论中提出。

如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

以下内容部分参考ChatGPT模型:
根据报错信息,可以看出是找不到DLL文件的问题。在打包exe时,需要将所有依赖的DLL文件也打包进去。可以尝试以下解决方案:

  1. 使用pyinstaller的--add-data参数将DLL文件打包进exe
pyinstaller main.py --add-data "path/to/dll/*;." --hidden-import matplotlib

其中,path/to/dll是DLL文件所在的路径,*表示将路径下所有DLL文件都打包进去,;.表示将打包后的文件放在exe所在的目录。

  1. 手动将DLL文件复制到exe所在的目录

可以手动将DLL文件复制到exe所在的目录,这样在运行exe时就可以找到需要的DLL文件。

  1. 使用conda创建虚拟环境

可以使用conda创建虚拟环境,并在虚拟环境中安装需要的库和依赖,然后再打包exe。

例如,创建名为myenv的虚拟环境,并安装matplotlib和其他依赖:

conda create -n myenv
conda activate myenv
conda install matplotlib numpy scipy

然后在虚拟环境中运行打包命令:

pyinstaller main.py --hidden-import matplotlib

这样可以保证打包时使用的库和依赖与本地开发环境一致,避免了依赖问题。
如果我的建议对您有帮助、请点击采纳、祝您生活愉快

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^该回答引用ChatGPT
根据报错信息,可以看到问题是在使用`_tkinter`模块时出现的。这个模块是Python的内置模块,是Tkinter图形用户界面(GUI)工具包的一部分。大多数情况下,这个模块是在Python安装过程中自动安装的。因此,出现这个问题可能是因为打包的过程中缺少了一些必要的库或者dll文件。

可以尝试添加`--hidden-import`参数,将一些隐藏的依赖库添加到打包文件中。在这个问题中,可以尝试添加下面的参数:


--hidden-import=tkinter
--hidden-import=tkinter.constants
--hidden-import=tkinter.messagebox
--hidden-import=tkinter.scrolledtext
--hidden-import=tkinter.ttk
--hidden-import=tkinter.font
--hidden-import=pickle
--hidden-import=multiprocessing.synchronize


其中,`--hidden-import=tkinter` 添加了 Tkinter 界面库;`--hidden-import=pickle` 添加了 Python 标准模块 pickle;`--hidden-import=multiprocessing.synchronize` 添加了 multiprocessing 模块所需的 synchronize 模块,如果程序中有使用这个模块就需要添加;其他的`--hidden-import`参数是添加了其他需要的 Tkinter 组件。

修改后的打包命令为:


pyinstaller main.py -p interface.py -p scrollableFrame.py -p windowSet.py -p Inst\Instruction.txt -p cSet\Settings.npy --hidden-import matplotlib --hidden-import tkinter --hidden-import tkinter.constants --hidden-import tkinter.messagebox --hidden-import tkinter.scrolledtext --hidden-import tkinter.ttk --hidden-import tkinter.font --hidden-import pickle --hidden-import multiprocessing.synchronize


如果还是出现问题,可以尝试手动添加一些缺失的dll文件。比如,在打包好的运行文件(.exe文件)所在的文件夹中,可以手动添加以下3个dll文件:


libpng16-16.dll
Qt5Svg.dll
Qt5PrintSupport.dll


这些dll文件可以在Python安装路径下的`Lib\site-packages\PyQt5\Qt\bin`文件夹中找到。将这些dll文件拷贝到打包好的运行文件(.exe文件)所在的文件夹中,再次运行程序看看是否可以解决问题。

注:以上的解决方案仅供参考,具体解决方案可能因环境而异。