首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用模块pdftotext构建独立的.exe

无法使用模块pdftotext构建独立的.exe
EN

Stack Overflow用户
提问于 2020-03-31 17:52:58
回答 1查看 570关注 0票数 2

我正在尝试将包含pdftotext模块的python脚本转换为一个独立的.exe。当我在我的anaconda中测试.exe应用程序时,它工作正常,但是当我在另一个设备上测试它时,它会让我发现这个错误:

代码语言:javascript
复制
File "main.py", line 3, in <module> #line 3 is import pdftotext
"ImportError: DLL load failed: The specified module could not be found"
[7300] Failed to execute script main

我确信这个问题与模块pdftotext有关,因为我尝试使用下面的简单脚本并正确地工作:

代码语言:javascript
复制
a=input("Start")
print("Hello world")
b=input("End")

如果我转换此脚本,则会出现错误:

代码语言:javascript
复制
import pdftotext
a=input("Inserisci")
print("Hello world")
b=input("Fine")

对不起,我的英语很差,我来自意大利。我希望我说的很清楚,谢谢大家

编辑1.我发现了这个问题可能与poppler (pdftotext所用的库)有关,但目前我还不知道要导入poppler的文件挂钩是什么

编辑2.在做了一些工作之后,我发现了两件可能有助于更好地理解我的情况的事情:

  1. -- .exe应用程序可以在我的设备上工作(甚至在我安装了poppler和pdftotext的anaconda env之外),但是它不能在其他设备上工作(我尝试过两种不同的windows膝上型计算机,错误是相同的);在dist文件夹(由pyinstaller构建)中的每个设备上没有“pdftotext”工作的脚本(由pyinstaller构建)会出现一个名为pdftotext的文件:这个文件是‘pdftoext.cp 37-win_amd64.pyd’(我不知道它是什么)。在我的anaconda中,只有两个文件包含字符串“pdftotext”:这些文件是“pdftopext.cp37-win_amd64.pyd”和'pdftotext.exe'

在不同设备上运行main.exe时,编辑3完全错误:

代码语言:javascript
复制
Traceback (most recent call last):
File "main.py",line 1, in <module>
ImportError: DLL load failed: The specified module could not be found
[7140] Failed to execute script main

完整的pyinstaller日志:

代码语言:javascript
复制
(envPDF) C:\Users\miche\Desktop\project>pyinstaller --additional-hooks-dir=hooks main.py
65 INFO: PyInstaller: 3.6
65 INFO: Python: 3.7.6 (conda)
65 INFO: Platform: Windows-10-10.0.18362-SP0
65 INFO: wrote C:\Users\miche\Desktop\project\main.spec
65 INFO: UPX is not available.
81 INFO: Extending PYTHONPATH with paths
['C:\\Users\\miche\\Desktop\\project', 'C:\\Users\\miche\\Desktop\\project']
81 INFO: checking Analysis
81 INFO: Building Analysis because Analysis-00.toc is non existent
81 INFO: Initializing module dependency graph...
81 INFO: Caching module graph hooks...
81 INFO: Analyzing base_library.zip ...
3232 INFO: Caching module dependency graph...
3326 INFO: running Analysis Analysis-00.toc
3343 INFO: Adding Microsoft.Windows.Common-Controls to dependent assemblies of final executable
  required by c:\users\miche\anaconda3\envs\envpdf\python.exe
3608 INFO: Analyzing C:\Users\miche\Desktop\project\main.py
3624 INFO: Processing module hooks...
3624 INFO: Loading module hook "hook-encodings.py"...
3718 INFO: Loading module hook "hook-pydoc.py"...
3718 INFO: Loading module hook "hook-xml.py"...
3954 INFO: Loading module hook "hook-pdftotext.py"...
6537 INFO: Determining a mapping of distributions to packages...
29442 INFO: Packages required by pdftotext:
[]
33735 INFO: Looking for ctypes DLLs
33735 INFO: Analyzing run-time hooks ...
33746 INFO: Looking for dynamic libraries
34387 INFO: Looking for eggs
34387 INFO: Using Python library c:\users\miche\anaconda3\envs\envpdf\python37.dll
34390 INFO: Found binding redirects:
[]
34395 INFO: Warnings written to C:\Users\miche\Desktop\project\build\main\warn-main.txt
34430 INFO: Graph cross-reference written to C:\Users\miche\Desktop\project\build\main\xref-main.html
35274 INFO: checking PYZ
35274 INFO: Building PYZ because PYZ-00.toc is non existent
35274 INFO: Building PYZ (ZlibArchive) C:\Users\miche\Desktop\project\build\main\PYZ-00.pyz
35794 INFO: Building PYZ (ZlibArchive) C:\Users\miche\Desktop\project\build\main\PYZ-00.pyz completed successfully.
35802 INFO: checking PKG
35802 INFO: Building PKG because PKG-00.toc is non existent
35804 INFO: Building PKG (CArchive) PKG-00.pkg
35824 INFO: Building PKG (CArchive) PKG-00.pkg completed successfully.
35824 INFO: Bootloader c:\users\miche\anaconda3\envs\envpdf\lib\site-packages\PyInstaller\bootloader\Windows-64bit\run.exe
35824 INFO: checking EXE
35824 INFO: Building EXE because EXE-00.toc is non existent
35824 INFO: Building EXE from EXE-00.toc
35824 INFO: Appending archive to EXE C:\Users\miche\Desktop\project\build\main\main.exe
35824 INFO: Building EXE from EXE-00.toc completed successfully.
35875 INFO: checking COLLECT
35875 INFO: Building COLLECT because COLLECT-00.toc is non existent
35875 INFO: Building COLLECT COLLECT-00.toc
96644 INFO: Building COLLECT COLLECT-00.toc completed successfully.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-01 04:59:34

您需要的是一个PyInstaller的钩子文件。引用下列文件:

总之,一个“钩子”文件扩展了

以适应PyInstaller包所使用的特殊需求和方法。...它们帮助分析阶段找到所需的文件。

官方的钩子文档可以在https://pyinstaller.readthedocs.io/en/stable/hooks.html找到。

编辑:以下内容应该可以工作:

创建此目录结构:

代码语言:javascript
复制
- yourcode.py
- hooks
  - hook-pdftotext.py

在钩子文件中放置以下内容:

代码语言:javascript
复制
from PyInstaller.utils.hooks import collect_all

datas, binaries, hiddenimports = collect_all('pdftotext')

然后用:

代码语言:javascript
复制
$ pyinstaller --additional-hook-dir=hooks yourcode.py
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60956874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档