首页 > 解决方案 > 使用 pdf2image 时如何将 poppler 包含到 pyinstaller 生成的 exe 中?

问题描述

我制作了一个简单的脚本,将当前目录中的 pdf 转换为图像。我想把它做成一个独立的.exe文件,这样在他的电脑上没有安装 python 的人可以使用它。

问题是pyinstaller无法包含poppler到 exe 文件中,因此pdf2image无法正确运行并且构建的 exe 失败。这是错误消息:

pdf2image.exceptions.PDFInfoNotInstalledError:无法获取页数。poppler 是否已安装并在 PATH 中?[32024] 无法执行脚本 bulk_pdf2img

我目前正在使用从命令安装pyinstaller并安装pdf2image的conda 环境。当我从提示符执行 python 脚本时它工作得很好,但是当脚本转换为 exe 时,它​​会引发上述错误。popplerconda install

我尝试了以下方法:

1.添加--add-data选项

我试图poppler通过这样做来添加数据。

$ pyinstaller --onedir --add-data="C:/Users/myusername/anaconda3/pkgs/poppler-0.89.0-h20e2fe3_4/Library/include/poppler/*;./poppler" bulk_pdf2img.py

不工作。

2.添加additional-hooks-dir选项

我补充projectdirectory/hooks/hook-pdf2image.py说有

from PyInstaller.utils.hooks import collect_all

data, binaries, hiddenimports = collect_all('pdf2image')

里面跑了

$ pyinstaller --onefile --additional-hooks-dir=hooks bulk_pdf2img.py

也不行。

我搜索了几乎每个 Stackoverflow 问题,这些问题显然与我有完全相同的问题,但找不到任何有效的解决方案。我现在该怎么办?

标签: pythonpdfcondapyinstallerpoppler

解决方案


文档

然后,您必须将bin/文件夹添加到PATHpoppler_path = r"C:\path\to\poppler-xx\bin"用作convert_from_path.

现在,如果您使用它的--onefile选项,pyinstaller它将在执行期间将所有文件解压缩到一个临时文件夹中,您可能需要查看此答案和相关帖子,以获取正确的路径。

您可以执行以下任何操作

  • 在开始时执行此操作以添加 to 的文件bin夹。popplerPATH

    os.environ["PATH"]+=os.pathsep+os.path.join('path/to/poppler','bin')
    
  • pdf2image.convert_from_path('path/to/pdf',poppler_path=r"path\to\poppler\bin") 
    

推荐阅读