今天在linux使用pyinstaller打包paddleocr服务,发现了一个错误,在此记录一下错误解决方案
运行环境
Linux kylinv10 4.19.90-25.41.v2101.ky10.aarch64 #1 SMP Thu Jun 20 18:08:20 CST 2024 aarch64 aarch64 aarch64 GNU/Linux
paddleocr==2.9.1 paddlepaddle==2.6.2 pyinstaller==6.11.1
错误信息
from paddleocr import PaddleOCR
<frozen importlib._bootstrap> 1007 _find_and_load
<frozen importlib._bootstrap> 986 _find_and_load_unlocked
<frozen importlib._bootstrap> 680 _load_unlocked
pyimod02_importers.py 384 exec_module
__init__.py 14 <module>
from .paddleocr import (
<frozen importlib._bootstrap> 1007 _find_and_load
<frozen importlib._bootstrap> 986 _find_and_load_unlocked
<frozen importlib._bootstrap> 680 _load_unlocked
pyimod02_importers.py 384 exec_module
paddleocr.py 21 <module>
from paddle.utils import try_import
<frozen importlib._bootstrap> 1007 _find_and_load
<frozen importlib._bootstrap> 986 _find_and_load_unlocked
<frozen importlib._bootstrap> 680 _load_unlocked
pyimod02_importers.py 384 exec_module
__init__.py 28 <module>
<frozen importlib._bootstrap> 1007 _find_and_load
<frozen importlib._bootstrap> 986 _find_and_load_unlocked
<frozen importlib._bootstrap> 680 _load_unlocked
pyimod02_importers.py 384 exec_module
__init__.py 36 <module>
<frozen importlib._bootstrap> 1007 _find_and_load
<frozen importlib._bootstrap> 986 _find_and_load_unlocked
<frozen importlib._bootstrap> 680 _load_unlocked
pyimod02_importers.py 384 exec_module
core.py 418 <module>
core.py 410 set_paddle_lib_path
TypeError:
sequence item 0: expected str instance, NoneType found
错误原因
paddle/base/core.py 410行 site_dirs 路径错误了
解决问题
判断是否pyinstaller打包后的运行环境,如果是的话,将_internal目录加入到site_dirs,这样后面的路径查找就没问题了.
最终的打包脚本如下:
pack_dir=".venv/lib/python3.9/site-packages"
pyinstaller.exe -D --clean \
--collect-all paddleocr \
--add-data "$pack_dir/paddle/libs:./paddle/libs" \
--hidden-import albumemtations \
--hidden-import docx \
--hidden-import pyclipper \
--hidden-import imghdr \
--hidden-import skimage \
--hidden-importl imgaug \
--hidden-import scipy.io \
--hidden-import lmdb \
server.py