在已编译的 Python 程序中运行 matplotlib 时出错:DLL load failed while importing _path

问题描述 投票:0回答:1

我有一个程序,它的一部分将使用 matplotlib 将一些数据绘制成一个简单的图形。当我从 PyCharm 运行它时它工作正常,但是当我用 pyinstaller 或 auto-py-to-exe 编译它时,从 exe 运行程序,并尝试获取图形,我得到错误:

ERROR:root:
Traceback (most recent call last):
  File "weeklyGiving.py", line 837, in graph_by_date
  File "PyInstaller\loader\pyimod03_importers.py", line 495, in exec_module
  File "graphThis.py", line 28, in <module>
  File "PyInstaller\loader\pyimod03_importers.py", line 495, in exec_module
  File "matplotlib\__init__.py", line 153, in <module>
    from . import _api, _version, cbook, _docstring, rcsetup
  File "PyInstaller\loader\pyimod03_importers.py", line 495, in exec_module
  File "matplotlib\rcsetup.py", line 27, in <module>
    from matplotlib.colors import Colormap, is_color_like
  File "PyInstaller\loader\pyimod03_importers.py", line 495, in exec_module
  File "matplotlib\colors.py", line 56, in <module>
    from matplotlib import _api, _cm, cbook, scale
  File "PyInstaller\loader\pyimod03_importers.py", line 495, in exec_module
  File "matplotlib\scale.py", line 22, in <module>
    from matplotlib.ticker import (
  File "PyInstaller\loader\pyimod03_importers.py", line 495, in exec_module
  File "matplotlib\ticker.py", line 138, in <module>
    from matplotlib import transforms as mtransforms
  File "PyInstaller\loader\pyimod03_importers.py", line 495, in exec_module
  File "matplotlib\transforms.py", line 49, in <module>
    from matplotlib._path import (
ImportError: DLL load failed while importing _path: The specified module could not be found.

浏览有关此的各种帖子,我尝试了许多不同的事情,例如运行

pip install msvc-runtime
并重新安装 MS Visual C++ Redistributables(x64 和 x86)。我了解 matplotlib 需要的 msvcp140.dll 和 vcruntime140.dll 文件都存在于我的 \Windows\System32 文件夹中。

我只是想不通为什么它可以在我的 IDE 中运行,但在将它编译为 exe 之后就不行了。有什么想法吗?

我的代码,简化后是这样的:

import matplotlib.pyplot as plot


class LineGraph:
    def __init__(self, pairs=[['2023-01-01', 352.76], ['2023-01-15', 725.48]]):
        self.x = []
        self.y = []
        for item in pairs:
            self.x.append(item[0])
            self.y.append(item[1])

    def graph_values_by_date_line(self):    
        plot.rc('xtick', labelsize=8)
        plot.rc('ytick', labelsize=8)

        fig, ax = plot.subplots()
        ax.plot(self.x, self.y, linewidth=1.0, marker='o', markersize=2)
        ax.legend()

        plot.xticks(rotation=90)

        figManager = plot.get_current_fig_manager()
        figManager.window.showMaximized()
        plot.show()

我最近通过 pyinstaller 编译的命令是:

pyinstaller --noconfirm --clean --collect-all matplotlib -i "../resources/icon.ico" --add-data "../resources;resources/" --add-data "../reportlab;reportlab/" --add-data "../gsdll64.dll;gsdll64.dll" --add-data "../gsdll64.lib;gsdll64.lib" --add-data "../gsprint.exe;gsprint.exe" --add-data "../gswin64.exe;gswin64.exe" --add-data "../gswin64c.exe;gswin64c.exe" --distpath "./output" ../WeeklyGiving.py
python windows matplotlib dll
1个回答
0
投票

Yeesh...原来我在某个时候安装了 matplotlib 的开发版本。我用

pip install matplotlib==3.7.1
回滚了它,它工作正常。

© www.soinside.com 2019 - 2024. All rights reserved.