使用Pyinstaller创建的.exe文件出现MatplotlibDeprecationWarning警告

11

我遇到了一个警告,这个警告只会在运行 pyinstaller 可执行文件时出现。

...appdata\local\programs\python\python37-32\lib\site-packages\PyInstaller\loader\pyimod03_importers.py:627: MatplotlibDeprecationWarning:
The MATPLOTLIBDATA environment variable was deprecated in Matplotlib 3.1 and will be removed in 3.3.
  exec(bytecode, module.__dict__)

我已经尝试了这里的所有建议:Python/matplotlib:去掉matplotlib.mpl警告

我也尝试过这个,但最终结果没有任何变化: Pyinstaller exe隐藏警告信息

在最终的可执行文件中,MatplotlibDeprecation警告仍然存在,而在像Pycharm这样的IDE中运行代码时,这些警告是基线不存在的。

使用: Python 3.7.2 Pyinstaller 3.5 Matplotlib 3.1.1


https://github.com/matplotlib/matplotlib/pull/11241 - nyanpasu64
2个回答

11

这里找到了pyinstaller问题,该问题(部分)解决了此问题。

Matplotlib>=3.1引入了弃用警告。因此,Pandas在未来的版本中将不再使用环境变量MATPLOTLIBDATA。然而,目前PyInstaller仍然依赖于此变量,原因不是很清楚。

导致警告的代码段位于pyi_rth_mpldata.py中:

os.environ["MATPLOTLIBDATA"] = os.path.join(sys._MEIPASS, "mpl-data")

很遗憾,在本地取消注释该行代码(site-packages/PyInstaller/loader/rthooks/rpyi_rth_mpldata.py)不是一个选项,会导致我的PyInstaller捆绑包崩溃。

我目前看到以下选项:

  1. 将matplotlib降级为v3.0 (pip install 'matplotlib==3.0.3')
  2. 在matplotlib中本地禁用废弃警告matplotlib/__init__.py:625
  3. 过滤警告(请参阅其他答案
  4. 等待补丁可用,或帮助PyInstaller团队找到补丁......

选项1适用于我,希望对你也有效。 选项2和3最简单,并且不应该有任何副作用。


4
如果只是想消除警告,可以使用内置的警告包中的filterwarnings()过滤器将其过滤掉,因为废弃警告继承自UserWarning,后者又继承自Warning。为此,请在任何matplotlib导入之前插入以下行。
import warnings
warnings.filterwarnings("ignore", "(?s).*MATPLOTLIBDATA.*", category=UserWarning)
(?s)是正则表达式的标志DOTALL,它允许.*匹配警告消息中包含的\n。您可以在PyInstaller构建之外运行上述代码后运行以下代码来测试它是否实际有效。
import os, sys
# Artificially add the MATPLOTLIBDATA environment variable. This is reset
# when you restart your python console.
os.environ["MATPLOTLIBDATA"] = os.path.join(os.path.split(sys.executable)[0], "Lib/site-packages/matplotlib/mpl-data")

# Then proceed to load matplotlib
import matplotlib

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接