使用 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
命令安装了 pyinstaller
和 pdf2image
以及 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,以获得正确的路径。
您可以执行以下任一操作
一开始执行这个将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")
我制作了一个简单的脚本,可以将当前目录中的 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
命令安装了 pyinstaller
和 pdf2image
以及 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 toPATH
or usepoppler_path = r"C:\path\to\poppler-xx\bin"
as an argument inconvert_from_path
.
现在,如果您使用 pyinstaller
的 --onefile
选项,它会在执行过程中将所有文件解压缩到一个临时文件夹中,您可能需要查看此 answer和相关的 post,以获得正确的路径。
您可以执行以下任一操作
一开始执行这个将
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")