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

Python 使用pdf2image时,如何将poppler包含到pyinstaller生成的exe中?,python,pdf,conda,pyinstaller,poppler,Python,Pdf,Conda,Pyinstaller,Poppler,我制作了一个简单的脚本,将当前目录中的PDF转换为图像。我想把它变成一个独立的.exe文件,这样电脑上没有安装python的人就可以使用它了 问题是pyinstaller未能将poppler包含到exe文件中,因此pdf2image无法正确运行,并且生成的exe失败。以下是错误消息: pdf2image.exceptions.PDFInfoNotInstalledError:无法获取页面 计数poppler是否已安装并在路径中?[32024]未能执行 脚本bulk_pdf2img 我目前正在co

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

问题是
pyinstaller
未能将
poppler
包含到exe文件中,因此
pdf2image
无法正确运行,并且生成的exe失败。以下是错误消息:

pdf2image.exceptions.PDFInfoNotInstalledError:无法获取页面 计数poppler是否已安装并在路径中?[32024]未能执行 脚本bulk_pdf2img

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

我尝试了以下方法:

1。添加
--添加数据
选项

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

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

2。添加
附加挂钩目录
选项

我添加了
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问题,这些问题显然与我的问题完全相同,但找不到任何有效的解决方案。我现在该怎么办?

来自

然后,您必须将
bin/
文件夹添加到
PATH
或使用
poppler\u PATH=r“C:\PATH\to\poppler xx\bin”
作为
convert\u from\u PATH
中的参数

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

您可以执行以下任一操作

  • 在开头执行此操作,将
    poppler
    bin
    文件夹添加到
    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”)
    

虽然解决方案有点难看,但我最终还是成功了。谢谢!是的,路径对我来说是个大问题,因为当我设置参数
poppler\u PATH=r“C:\PATH\to\poppler xx\bin”
时,pdfinfo.exe无法找到相关的.dll文件。如果只指定pdfinfo.exe的bin/location,它就不起作用。我用一种丑陋的方法解决了这个问题,即手动复制粘贴
C:\Users\my\u username\anaconda3\envs\my\u envname\Library\bin中的所有.dll文件,但在将来,我会尝试在运行时设置PATH env变量。