【发布时间】:2019-11-04 22:44:11
【问题描述】:
我正在尝试使用 Python 37-32 在我公司客户的 Windows Server 2016 Build 14393 计算机上导入 ocrmypdf。当我在 Jupyter Notebook 中导入库时,它无法使用 ctypes.utility.find_library() 找到 leptonica。
Ocrmypdf 是 Linux 开发的 Python 3 包。根据文档 (https://ocrmypdf.readthedocs.io/en/latest/introduction.html),它不支持 Windows。建议的解决方法是 docker 容器和适用于 Linux 的 Windows 子系统。
我宁愿不使用 docker 容器,因为我和我的同事都没有这方面的经验。我无法使用 wsl,因为它不适用于我的 Windows Server 2016 版本(请参阅故障排除小节:https://docs.microsoft.com/en-us/windows/wsl/install-on-server)
此讨论 (find_library() in ctypes) 指出,您可以通过将环境路径变量编辑为包含它的文件夹,将 ctypes.utility.find_library 指向所需的库文件。方便的是,Tesseract OCR 的 windows 下载包括 liblept。将 Path 变量编辑为指向该文件夹会是一件危险的事情吗?
编辑:我尝试在笔记本电脑的环境路径上添加 Tesseract-OCR 文件夹的路径并重新启动 Anaconda 等。ocrmypdf 仍然给出相同的错误。 仔细阅读该讨论会发现 find_library 在 Windows 上的操作方式不同。阅读文档 (https://docs.python.org/2.5/lib/ctypes-finding-shared-libraries.html) 指出“在 Windows 上,find_library 沿着系统搜索路径搜索,并返回完整的路径名,但由于没有预定义的命名方案,所以像 find_library("c") 这样的调用将失败并且返回无。”这是否意味着我必须硬编码一个名称才能找到该库?
这个问题已经被复制了,尽管是在不同的机器上,这里:https://github.com/jbarlow83/OCRmyPDF/issues/341。您可以通过在 Windows 机器上运行以下代码来重现该问题。
!pip install ocrmypdf
import ocrmypdf
上述代码的预期结果是ocrmypdf以可用的形式成功导入。 上面代码的结果是:
OSError Traceback (most recent call last)
<ipython-input-2-a81f3474d7ad> in <module>
----> 1 import ocrmypdf
~\AppData\Local\Continuum\anaconda3\lib\site-packages\ocrmypdf\__init__.py in <module>
16 # along with OCRmyPDF. If not, see <http://www.gnu.org/licenses/>.
17
---> 18 from . import helpers, hocrtransform, leptonica, pdfa, pdfinfo
19 from ._version import PROGRAM_NAME, __version__
20 from .api import Verbosity, configure_logging, ocr
~\AppData\Local\Continuum\anaconda3\lib\site-packages\ocrmypdf\leptonica.py in <module>
40 logger = logging.getLogger(__name__)
41
---> 42 lept = ffi.dlopen(find_library('lept'))
43 lept.setMsgSeverity(lept.L_SEVERITY_WARNING)
44
OSError: cannot load library '<None>': error 0x57
【问题讨论】: