python - 使用 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 时,它会引发上述错误。poppler
conda 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 问题,这些问题显然与我有完全相同的问题,但找不到任何有效的解决方案。我现在该怎么办?
解决方案
从文档
然后,您必须将
bin/
文件夹添加到PATH
或poppler_path = r"C:\path\to\poppler-xx\bin"
用作convert_from_path
.
现在,如果您使用它的--onefile
选项,pyinstaller
它将在执行期间将所有文件解压缩到一个临时文件夹中,您可能需要查看此答案和相关帖子,以获取正确的路径。
您可以执行以下任何操作
在开始时执行此操作以添加 to 的文件
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")
推荐阅读
- r - 如何使用显示 CLD 字母的箱线图显示 Tukey 测试的结果
- java - 如何查看数组
- asp.net - 无法在 VB.NET 中调用扩展方法
- c# - Swashbuckle IDocumentFilter 实现 - 如何将 ActionDescriptor.MethodInfo 链接到 Operation
- unit-testing - 循环中带有致命流程的单元测试代码
- java - Vaadin:网格重复数据
- jquery - jQuery getJSON 不填充 html 表
- javascript - 停止 extract-css-chunks-webpack-plugin 组合所有 CSS
- javascript - javascript里程计算
- vb.net - 在 Visual Basic 中滚动时,将固定面板保持在表单可见区域的底部