问题描述
我制作了一个简单的脚本,可以将当前目录中的 pdf 文件转换为图像。我想把它做成一个独立的 .exe
文件,以便在他的电脑上没有安装 python 的人可以使用它。
问题在于 pyinstaller
未能将 poppler
包含到 exe 文件中,因此 pdf2image
无法正确运行并且构建的 exe 失败。这是错误消息:
pdf2image.exceptions.PDFInfonotinstalledError:无法获取页面 数数。 poppler 是否已安装并在 PATH 中? [32024] 执行失败 脚本bulk_pdf2img
我目前正在使用从 pyinstaller
命令安装了 pdf2image
和 poppler
以及 conda install
的 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
也不起作用。
我搜索了几乎所有 Stackoverflow 问题,这些问题显然与我的问题完全相同,但找不到任何有效的解决方案。我现在该怎么办?
解决方法
来自docs
然后您必须将 bin/
文件夹添加到 PATH
或使用 poppler_path = r"C:\path\to\poppler-xx\bin"
作为 convert_from_path
中的参数。
现在,如果您使用 --onefile
的 pyinstaller
选项,它会在执行期间将所有文件解压到一个临时文件夹中,您可能需要查看此 answer 和相关帖子,以获得正确的路径。
您可以执行以下任何操作
-
在开头执行此操作,将
bin
的poppler
文件夹添加到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")