pyinstaller打包paddleocr发生错误解决
python环境是3.9,github paddleocr v2.10.0。
一个非常简单的案例如下,打包时发生错误。
import requests
from paddleocr import PaddleOCR
if __name__ == "__main__":paddleocr_ocr = PaddleOCR(use_angle_cls=True, lang='ch',det_model_dir='models/ch_PP-OCRv3_det_infer',rec_model_dir='models/ch_PP-OCRv3_rec_infer',cls_model_dir='models/ch_ppocr_mobile_v2.0_cls_infer')def paddleocr_ocr_image():try:params = {"compression_quality": "1.0"}with requests.get("get_jpg_pic", params=params, stream=True, timeout=3) as image_response:image_response.raise_for_status()if not image_response.headers.get("Content-Type", "").startswith("image/jpeg"):raise ValueError(f"无效的响应类型:{image_response.headers.get('Content-Type')}")image_data = image_response.contentresult = paddleocr_ocr.ocr(image_data, cls=True)formatted_result = []for line in result[0]:points = line[0]text, confidence = line[1]x_coords = [point[0] for point in points]y_coords = [point[1] for point in points]formatted_result.append({"text": text,"center_x": int(sum(x_coords) / len(x_coords)),"center_y": int(sum(y_coords) / len(y_coords)),"width": int(max(x_coords) - min(x_coords)),"height": int(max(y_coords) - min(y_coords)),"confidence": confidence})return formatted_resultexcept requests.RequestException as e:print(f"图片失败:{str(e)}")return False
错误1:找不到 no module named "distutils.core"
错误2:找不到 Cython
错误3:找不到 paddleocr/tools
错误4:找不到 no module named "ppocr"
错误5:找不到 mklml.dll
解决方法打包配置:,注意替换启动入口文件名、引入的路径名
# -*- mode: python ; coding: utf-8 -*-from PyInstaller.utils.hooks import collect_allmklml_path = r'C:\\Users\\Administrator\\Desktop\\iospythonProject\\venv\\Lib\\site-packages\\paddle\\libs\\mklml.dll'
paddleocr_datas, paddleocr_binaries, paddleocr_hiddenimports = collect_all('paddleocr')a = Analysis(['noUsb.py'],pathex=[],binaries=[],datas=[('C:\\Users\\Administrator\\Desktop\\iospythonProject\\venv\\Lib\\site-packages\\Cython\\Utility', 'Cython/Utility'),('C:\\Users\\Administrator\\Desktop\\iospythonProject\\venv\\Lib\\site-packages\\paddleocr\\tools', 'paddleocr/tools')]+ paddleocr_datas,hiddenimports=['distutils.core','ppocr']+ paddleocr_hiddenimports,hookspath=[],hooksconfig={},runtime_hooks=[],excludes=[],noarchive=False,optimize=0,
)a.binaries.extend(paddleocr_binaries)
a.binaries.append(('mklml.dll', mklml_path, 'BINARY'))
pyz = PYZ(a.pure)exe = EXE(pyz,a.scripts,a.binaries,a.datas,[],name='noUsb',debug=False,bootloader_ignore_signals=False,strip=False,upx=True,upx_exclude=[],runtime_tmpdir=None,console=False,disable_windowed_traceback=False,argv_emulation=False,target_arch=None,codesign_identity=None,entitlements_file=None,
)