我正在尝试使用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
答案 0 :(得分:0)
我已经能够通过更新路径来使Windows 10正常运行,并且工作正常。我使用msys2进行安装,因此使用了路径名。更新以指向您的liblept-5.dll所在的位置。
if os.name == 'nt':
os.environ['PATH'] = os.environ.get("PATH", "") + ';C:\\msys64\\mingw64\\bin'