使用 pdf2image 时如何将 poppler 包含到 pyinstaller 生成的 exe 中?

How do I include poppler to pyinstaller generated exe when using pdf2image?

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

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

pdf2image.exceptions.PDFInfoNotInstalledError: Unable to get page count. Is poppler installed and in PATH? [32024] Failed to execute script bulk_pdf2img

我目前正在开发通过 conda install 命令安装了 pyinstallerpdf2image 以及 poppler 的 conda 环境。当我从提示符下执行 python 脚本时,它工作得很好,但是当脚本转换为 exe 时,它​​会引发上述错误。

我尝试了以下方法:

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

同样无效。

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

来自docs

You will then have to add the bin/ folder to PATH or use poppler_path = r"C:\path\to\poppler-xx\bin" as an argument in convert_from_path.

现在,如果您使用 pyinstaller--onefile 选项,它会在执行过程中将所有文件解压缩到一个临时文件夹中,您可能需要查看此 answer和相关的 post,以获得正确的路径。

您可以执行以下任一操作

  • 一开始执行这个将popplerbin文件夹添加到PATH.

    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")