【问题标题】:Installing OCRmyPDF on Windows Server 2016 - Can't find liblept.dll. Is editing Path safe?在 Windows Server 2016 上安装 OCRmyPDF - 找不到 liblept.dll。编辑路径安全吗?
【发布时间】: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

【问题讨论】:

    标签: python windows leptonica


    【解决方案1】:

    我已经能够通过更新路径来获得这个工作的 Windows 10 并且它工作正常。我使用 msys2 来安装它,因此是路径名。更新到您的 liblept-5.dll 所在的位置。

    if os.name == 'nt':
        os.environ['PATH'] = os.environ.get("PATH", "") + ';C:\\msys64\\mingw64\\bin'
    

    【讨论】:

    • 这不是路径问题,因为我的文件夹已经在路径上,只是找不到文件,因为它正在寻找不同的名称。我已经硬编码了正确的名称来寻找它并且它有效。谢天谢地,Ocrmypdf 已更新,现在可以更好地与 Windows 一起使用。
    猜你喜欢
    • 2020-12-10
    • 2016-08-24
    • 2020-04-10
    • 2021-12-02
    • 2021-02-11
    • 2017-08-07
    • 2021-04-03
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多