为什么在运行python可执行文件时出现此错误?

问题描述

好的,这是即时通讯程序在解决数独的python程序中使用的库。

import warnings

def fxn():
    warnings.warn("deprecated",DeprecationWarning)

with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    fxn()

warnings.filterwarnings("ignore","(?s).*MATPLOTLIBDATA.*",category=UserWarning)
warnings.filterwarnings("ignore",category=DeprecationWarning)

import cv2
import os
os.environ['OPENCV_IO_MAX_IMAGE_PIXELS']=str(2**64)
import pyautogui
import numpy as np
from matplotlib import pyplot as plt
import PyTesseract
from imutils import contours
from selenium import webdriver

当我在pycharm中运行此代码时,程序运行良好,但是,当我使用项目的可执行文件时,出现此错误,我不知道为什么。

C:\Users\carme\PycharmProjects\SudokuSolver\venv\Scripts\dist\main>main.exe
c:\users\carme\pycharmprojects\sudokusolver\venv\lib\site-packages\PyInstaller\loader\pyimod03_importers.py:493: MatplotlibDeprecationWarning: Matplotlib installs where the data is not in the mpl-data subdirectory of the package are deprecated since 3.2 and support for them will be removed two minor releases later.
  exec(bytecode,module.__dict__)
Traceback (most recent call last):
  File "main.py",line 71,in <module>
  File "<frozen importlib._bootstrap>",line 991,in _find_and_load
  File "<frozen importlib._bootstrap>",line 975,in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>",line 671,in _load_unlocked
  File "c:\users\carme\pycharmprojects\sudokusolver\venv\lib\site-packages\PyInstaller\loader\pyimod03_importers.py",line 493,in exec_module
    exec(bytecode,module.__dict__)
  File "matplotlib\__init__.py",line 905,in <module>
  File "matplotlib\cbook\__init__.py",line 480,in _get_data_path
  File "matplotlib\__init__.py",line 239,in wrapper
  File "matplotlib\__init__.py",line 534,in get_data_path
  File "matplotlib\__init__.py",line 563,in _get_data_path
NameError: name 'defaultParams' is not defined
[19212] Failed to execute script main 

解决方法

经过反复试验,我发现pyinstaller与最新版本的matplotlib有冲突。为了使用pyinstaller生成脚本的可执行文件,您应该将matplotlib降级到3.2.2版本。我还发现numpy的最新版本(1.19.4)出现了一些问题,当我将numpy降级为1.19.3时,该版本就消失了。

您可以检查我的存储库https://github.com/matiasleoni/COVID19_plotter,在其中创建了一个简单的脚本来使用matplotlib软件包绘制COVID19全局数据。经过多次失败的尝试之后,我还能够如上所述创建它的可执行版本(另请参见该存储库的README.md)。