首页 > 其他分享 >记录pyinstaller 打包 pdfplumber 问题解决过程

记录pyinstaller 打包 pdfplumber 问题解决过程

时间:2024-02-23 15:13:12浏览次数:17  
标签:MODULENAME pyinstaller -- py collect pypdfium2 pdfplumber 打包

今天有一个pdf文件处理需求,使用pdfplumber库完成,python环境是3.11+win10 pyinstaller 5.10.1

打包完成后,工具可以顺利打开,但是执行处理的时候报错

  File "pypdfium2_raw\bindings.py", line 93, in <module>
  File "pypdfium2_raw\bindings.py", line 83, in _register_library
  File "pypdfium2_raw\bindings.py", line 78, in _find_library
ImportError: Could not find library 'pdfium' in ['.'] (system search disabled)

跟随报错找到了库pypdfium2_raw, 看这个意思是这个pdfium.ll没有打包进去

首先使用--add-data把这个dll文件打包进去,还是一样提示报错

感觉可能这个pypdfium2_raw没导入进去,就是用--hidden-import把这个库导入,照样报错

第二次感觉可能是这个dll文件算二进制文件,要用--add-binary导入,结果还是报错

这种情况也没怎么处理过,就找资料,先看下pyinstaller的帮助

usage: pyinstaller [-h] [-v] [-D] [-F] [--specpath DIR] [-n NAME] [--add-data <SRC;DEST or SRC:DEST>]
                   [--add-binary <SRC;DEST or SRC:DEST>] [-p DIR] [--hidden-import MODULENAME]
                   [--collect-submodules MODULENAME] [--collect-data MODULENAME] [--collect-binaries MODULENAME]
                   [--collect-all MODULENAME] [--copy-metadata PACKAGENAME] [--recursive-copy-metadata PACKAGENAME]
                   [--additional-hooks-dir HOOKSPATH] [--runtime-hook RUNTIME_HOOKS] [--exclude-module EXCLUDES]
                   [--splash IMAGE_FILE] [-d {all,imports,bootloader,noarchive}] [--python-option PYTHON_OPTION] [-s]
                   [--noupx] [--upx-exclude FILE] [-c] [-w]
                   [-i <FILE.ico or FILE.exe,ID or FILE.icns or Image or "NONE">] [--disable-windowed-traceback]
                   [--version-file FILE] [-m <FILE or XML>] [--no-embed-manifest] [-r RESOURCE] [--uac-admin]
                   [--uac-uiaccess] [--win-private-assemblies] [--win-no-prefer-redirects] [--argv-emulation]
                   [--osx-bundle-identifier BUNDLE_IDENTIFIER] [--target-architecture ARCH]
                   [--codesign-identity IDENTITY] [--osx-entitlements-file FILENAME] [--runtime-tmpdir PATH]
                   [--bootloader-ignore-signals] [--distpath DIR] [--workpath WORKPATH] [-y] [--upx-dir UPX_DIR] [-a]
                   [--clean] [--log-level LEVEL]
                   scriptname [scriptname ...]

常规的打包参数一个个看过来,看到有4个以--collect-开头的指令,找了相关说明

--collect-submodules MODULENAME
                        收集指定包或模块的所有子模块。此选项可以多次使用。
--collect-data MODULENAME
                        收集指定包或模块的所有数据文件。此选项可以多次使用。
--collect-binaries MODULENAME
                        收集指定包或模块的所有二进制文件。此选项可以多次使用。
--collect-all MODULENAME
                        收集指定包或模块的所有子模块、数据文件和二进制文件。此选项可以多次使用。

看样子应该就是打包的时候没把dll文件打包进去,因为python用的是pyd文件,可能dll文件直接被忽略了

那么简单点就直接--collect-all 试试,果然,不报刚才的错了,换了另一个错

  File "pypdfium2\version.py", line 45, in api_tag
  File "pypdfium2\version.py", line 45, in <genexpr>
  File "functools.py", line 1001, in __get__
  File "pypdfium2\version.py", line 26, in _data
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\****\\AppData\\Local\\Temp\\_MEI47962\\pypdfium2\\version.json'

看提示是另一个库的version文件没有

这个简单,把另一个库的文件也收集进去--collect-all=pypdfium2_raw  --collect-all=pypdfium2,使用了这2个参数,这2个库的文件都会被打包进去

打包完成运行就不在报错了,至此完成了此次打包报错的修复

总结:pyinstaller打包会忽略python以为的文件格式,比如json,dll之类的,一般库的文件信息都写到py文件里面,dll库的话也是window平台的专用格式,python相关的是pyd

所以这种情况就需要手动指定将对应库的文件全部采集打包进去。

 

标签:MODULENAME,pyinstaller,--,py,collect,pypdfium2,pdfplumber,打包
From: https://www.cnblogs.com/darkspr/p/18029559

相关文章

  • uniapp之原生APP本地打包成原生APP本地打包安卓APK
    前言由于项目要求将uniapp打包成安卓应用,所以今天来学习如何将uniapp项目打包成安卓apk。出于企业级代码安全考虑,所以选择了原生APP本地打包的方式进行打包,杜绝防止代码泄漏的风险。......
  • 02-21 记SpringBoot3 打包成exe的过程以及一些问题
    先说说基本流程:(Windows环境,springbootv3.2.1)1.首先mavenpom.xml中加入如下代码<build><plugins><plugin><groupId>org.graalvm.buildtools</groupId><artifactId>native-maven-plugi......
  • maven多环境打包部署
    1、多环境properties文件创建准备properties配置文件在application.properties中配置标识环境[email protected]@在SpringBoot中多环境配置文件名需要满足application-{profiles.active}.properties的格式,其中{profiles.active}对应你的环境标识。#环......
  • SpringBoot使用git-commit-id-maven-plugin打包
    简介git-commit-id-maven-plugin是一个maven插件,用来在打包的时候将git-commit信息打进jar中。这样做的好处是可以将发布的某版本和对应的代码关联起来,方便查阅和线上项目的维护。至于它的作用,用官方说法,这个功能对于大型分布式项目来说是无价的。功能你是否经常遇到这样的......
  • 记录一次grpc打包的坑
    GRPC打包的坑今天做的项目需要用到grpc,然后需要打jar包进行引用,打包的时候却失败了报了protocdidnotexitcleanly.Reviewoutputformoreinformation.--grpc-java_out:protoc-gen-grpc-java:Thesystemcannotfindthepathspecified.的相关错误很明显就是路径的问......
  • vite快速安装vue,及项目打包发布
    原文地址:https://mp.weixin.qq.com/s/xdEqyhfmW8P0R_wktymb3wvite快速安装vue,及项目打包发布1.下载、安装VScode,下载地址:https://code.visualstudio.com/2.下载、安装node.js,国内下载地址:http://www.nodejs.com.cn/3.创建空文件夹,用VScode打开,在左侧空白处点击鼠标右键,选择在......
  • 在idea中maven项目打包jar文件
    1.在maven工程配置pom.xml文件2.使用maven-assembly-plugin打包在maven选项栏找到项目->Plugins->assembly->点击assembly:assembly执行 如果找不到assembly选项需要检查一下你的Maven配置。 执行成功如下图3.使用maven-assembly-plugin打包是比较推荐的方式该打......
  • 手动将一个java程序打包成jar包
    1.目录结构新建三个目录:bin,META-INF,src src目录下存放源码 META-INF目录下存放MANIFEST.MF bin目录下存放.class文件 2.编译源码javac-dbinsrc/DESUtil.java 3.在META-INF目录下新建MANIFEST.MF文件Manifest-Version:1.0Main-Class:DESUtilClass-......
  • 在windows下打包linux可执行文件
    尝试set命令设置环境变量,然后执行打包,但是打包出来还是windows文件命令行直接设置:在运行 gobuild 命令之前,在同一命令行窗口中先设置环境变量,并确保在同一行内设置以确保它们在同一环境中生效CGO_ENABLED=0GOOS=linuxGOARCH=amd64gobuild-omyapp-linux-amd64main.go......
  • docker打包镜像
    Docker容器镜像打成tar包前言本文记录docker保存镜像、打包tar、加载tar镜像。简述需求:在现在容器镜像上保存镜像进行打包,在另一台服务上使用;或现有的容器安装了一些库,配置了开发环境,需要保存下载,下次加载后直接使用一、docker保存镜像1、首先查看下现有要打tar包的容器(目的......