在Windows Server 2016上安装OCRmyPDF-找不到liblept.dll。编辑路径安全吗?

时间:2019-11-04 22:44:11

标签: python windows leptonica

我正在尝试使用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)指出,您可以通过将环境Path变量编辑为包含它的文件夹,将ctypes.utility.find_library指向所需的库文件。方便地,Tesseract OCR的Windows下载包括liblept。编辑Path变量以指向该文件夹是否会很危险?

编辑:我尝试将路径添加到笔记本电脑环境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

1 个答案:

答案 0 :(得分:0)

我已经能够通过更新路径来使Windows 10正常运行,并且工作正常。我使用msys2进行安装,因此使用了路径名。更新以指向您的liblept-5.dll所在的位置。

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