问题描述: 在Mac系统下使用pdf2docx将PDF转换成word文档时,报错ImportError: dlopen(/Users/mac/opt/anaconda3/lib/python3.7/site-packages/PyMuPDF-1.19.6-py3.7-macosx-10.13-x86_64.egg/fitz/_fitz.cpython-37m-darwin.so, 2): Symbol not found: ____chkstk_darwin,以下是完整的报错信息:
Traceback (most recent call last):
File "/Users/mac/PycharmProjects/pdf-word/pdf-to-word.py", line 1, in <module>
from pdf2docx import Converter
File "/Users/mac/opt/anaconda3/lib/python3.7/site-packages/pdf2docx-alpha-py3.7.egg/pdf2docx/__init__.py", line 1, in <module>
from .converter import Converter
File "/Users/mac/opt/anaconda3/lib/python3.7/site-packages/pdf2docx-alpha-py3.7.egg/pdf2docx/converter.py", line 7, in <module>
import fitz
File "/Users/mac/opt/anaconda3/lib/python3.7/site-packages/PyMuPDF-1.19.6-py3.7-macosx-10.13-x86_64.egg/fitz/__init__.py", line 10, in <module>
from fitz.fitz import *
File "/Users/mac/opt/anaconda3/lib/python3.7/site-packages/PyMuPDF-1.19.6-py3.7-macosx-10.13-x86_64.egg/fitz/fitz.py", line 15, in <module>
from . import _fitz
ImportError: dlopen(/Users/mac/opt/anaconda3/lib/python3.7/site-packages/PyMuPDF-1.19.6-py3.7-macosx-10.13-x86_64.egg/fitz/_fitz.cpython-37m-darwin.so, 2): Symbol not found: ____chkstk_darwin
Referenced from: /Users/mac/opt/anaconda3/lib/python3.7/site-packages/PyMuPDF-1.19.6-py3.7-macosx-10.13-x86_64.egg/fitz/_fitz.cpython-37m-darwin.so
Expected in: /usr/lib/libSystem.B.dylib
in /Users/mac/opt/anaconda3/lib/python3.7/site-packages/PyMuPDF-1.19.6-py3.7-macosx-10.13-x86_64.egg/fitz/_fitz.cpython-37m-darwin.so
一、问题分析
- 从报错信息中可知:加载_fitz.cpython-37m-darwin.so动态库时,出现Symbol not found: ____chkstk_darwin,即 ____chkstk_darwin符号找不到。我们在Mac终端用nm命令来查看_fitz.cpython-37m-darwin.so所有未定义的符号,命令如下:
我们可以发现在列出来的符号中包含____chkstk_darwin。
2. 其次,报错信息中还说____chkstk_darwin期望在libSystem.B.dylib中,我们继续在Mac终端中使用nm命令打印出libSystem.B.dylib中的符号,命令如下:
从打印的内容中可以发现并没有包含____chkstk_darwin。
二、结论
从以上分析可知,错误是由dlopen()加载_fitz.cpython-37m-darwin.so引起的,猜测可能是Mac系统在链接_fitz.cpython-37m-darwin.so时出现错误的缘故(我的Mac系统版本为:macOS High Sierra 10.13.6),当苹果系统高于10.13可能不会报错。
三、解决方案
fitz模块是PyMuPDF包的主要模块,既然fitz出现问题,那就使用较低版本的PyMuPDF,我使用的是1.18.1,同时降低pdf2docx的版本,我使用的是0.5.1版本。因为pdf2docx的版本高于0.5.1时需要opencv-python依赖库,而安装opencv-python时容易卡死以及其他问题。
PS:以下是Mac系统版本和相关包的版本
1.MacOS High Sierra: 10.13.6
2.pdf2docx: 0.5.1
3.PyMuPDF: 1.18.1
4.python: 3.7
5.pip升级到最新版本