No module named PyQt5

news2024/11/19 6:15:37

背景:将Python文件转成APP,在编辑器中运行没有问题,一使用pyinstaller转成app就报错了

尝试了各种网上的解法都无效,最后是GPT4解决的

Q:

我遇到一个奇怪的问题,我在python文件中,引用了pyqt5的相关模块,例如:from PyQt5 import QtWidgets,我已经安装了PyQt5,并且在运行此脚本时,可以正常运行,但当我使用pyinstaller windowed myapp.py,这个指令之后,打包出来的myapp.app就始终会闪退,我又运行了同时生成的可执行文件,我看到终端里有这样的报错:
Traceback (most recent call last):
File "main.py", line 1, in <module>
from PyQt5 import QtWidgets
ModuleNotFoundError: No module named 'PyQt5'
[87019] Failed to execute script 'main' due to unhandled exception: No module named 'PyQt5'
[87019] Traceback:
Traceback (most recent call last):
File "main.py", line 1, in <module>
from PyQt5 import QtWidgets
ModuleNotFoundError: No module named 'PyQt5'

这是为什么呢?

A:

这个问题可能是由于PyInstaller在打包应用时没有正确地包含PyQt5模块。要解决这个问题,你可以尝试以下几个步骤:

1. 创建一个名为`hook-PyQt5.py`的文件,并将其放在你的项目目录中。在这个文件中,写入以下内容:

```python
from PyInstaller.utils.hooks import collect_submodules, collect_data_files

hiddenimports = collect_submodules('PyQt5')
datas = collect_data_files('PyQt5', include_py_files=True)
```

这段代码将告诉PyInstaller收集所有与PyQt5相关的子模块和数据文件。

2. 在你的项目目录中,创建一个名为`myapp.spec`的文件。将以下内容写入这个文件:

# myapp.spec

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None

a = Analysis(['myapp.py'],
             pathex=['/path/to/your/project'],
             binaries=[],
             datas=[],
             hookspath=['.'],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='myapp',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=False,
          icon=None)
app = BUNDLE(exe,
             name='myapp.app',
             icon=None,
             bundle_identifier=None)

请确保将`/path/to/your/project`替换为你的项目目录的实际路径。

3. 使用以下命令重新构建和打包你的应用:

pyinstaller --clean myapp.spec

这将使用`myapp.spec`文件中的设置来运行PyInstaller,从而确保PyQt5模块被正确地包含在打包的应用中。

4. 在`dist`目录中找到生成的`myapp.app`或`myapp.exe`(取决于你的操作系统),然后尝试运行它。现在,应用程序应该不再闪退,并且能够正常运行。

Q:

我按照你的步骤,pyQt的问题解决了,现在它有了另一个报错,
Traceback (most recent call last):
  File "main.py", line 1, in <module>
  File "PyInstaller/loader/pyimod02_importers.py", line 352, in exec_module
  File "PyQt5/__init__.py", line 20, in <module>
ModuleNotFoundError: No module named 'pkgutil'
[99055] Failed to execute script 'main' due to unhandled exception: No module named 'pkgutil'
[99055] Traceback:
Traceback (most recent call last):
  File "main.py", line 1, in <module>
  File "PyInstaller/loader/pyimod02_importers.py", line 352, in exec_module
  File "PyQt5/__init__.py", line 20, in <module>
    __path__ = __import__('pkgutil').extend_path(__path__, __name__)
ModuleNotFoundError: No module named 'pkgutil'

A:

这个错误表明`pkgutil`模块在打包的应用程序中未找到。`pkgutil`是Python的一个内置模块,通常不应该出现这个问题。但是,我们可以通过更新`myapp.spec`文件来解决这个问题。

在`myapp.spec`文件中,找到`Analysis`部分,将`pkgutil`添加到`hiddenimports`列表中。修改后的`Analysis`部分应如下所示:

a = Analysis(['myapp.py'],
             pathex=['/path/to/your/project'],
             binaries=[],
             datas=[],
             hookspath=['.'],
             runtime_hooks=[],
             excludes=[],
             hiddenimports=['pkgutil'],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)

保存更改,然后重新运行`pyinstaller --clean myapp.spec`命令以构建和打包应用程序。现在,你的应用程序应该能够正常运行,而不会出现`ModuleNotFoundError: No module named 'pkgutil'`的错误。

成功运行!(这个是官网的示例,之前我的代码一直有问题,为了排除是我自己的问题,就用了官网示例来测试,发现问题一直,才继续往下解决的,官网地址:Packaging PyQt5 applications into a macOS app with PyInstaller)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/543225.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android Termux安装MySQL数据库 | 公网安全远程连接【cpolar内网穿透】

文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前言 Android作为移动设备&#xff0c;尽管最初并非设计为服务器&#xff0c;但是随着技术的进步我们可以将Android配置为生产力工具&#xff0c;变成一个随身…

【数据结构与算法】常见排序算法

文章目录 概述1、冒泡排序&#xff08;Bubble Sort&#xff09;1.1 步骤1.2 动图演示1.3 java代码实现 2、选择排序&#xff08;Selection Sort&#xff09;2.1 步骤2.2 动图演示2.3 java代码实现 3、插入排序&#xff08;Insertion Sort&#xff09;3.1 步骤3.2 动图演示3.3 j…

测试-用例篇

软件测试的生命周期 需求分析 - 测试计划 - 测试设计、测试开发 - 测试执行 - 测试评估 测试用例要素 测试环境、操作步骤、测试数据、预期结果 测试用例的要素没有执行结果。 测试用例要素不需要执行结果&#xff0c;因为执行结果需要执行完测试用例才会知道&#xff0c;没…

代码随想录算法训练营day45 | 70. 爬楼梯 (进阶),322. 零钱兑换,279.完全平方数

代码随想录算法训练营day45 | 70. 爬楼梯 &#xff08;进阶&#xff09;&#xff0c;322. 零钱兑换&#xff0c;279.完全平方数 70. 爬楼梯 &#xff08;进阶&#xff09;解法一&#xff1a;动态规划 322. 零钱兑换解法一&#xff1a;动态规划 279.完全平方数解法一&#xff1…

秒懂算法 | 共识算法之Raft算法模拟数

01、Leader选举 存在A、B、C三个成员组成的Raft集群&#xff0c;刚启动时&#xff0c;每个成员都处于Follower状态&#xff0c;其中&#xff0c;成员A心跳超时为110ms&#xff0c;成员B心跳超时为150ms&#xff0c;成员C心跳超时为130ms&#xff0c;其他相关信息如图1所示。 ■…

2024王道数据结构考研丨第三章:栈和队列

2024王道数据结构考研笔记专栏将持续更新&#xff0c;欢迎 点此 收藏&#xff0c;共同交流学习… 文章目录 第三章&#xff1a;栈和队列3.1栈&#xff08;stack&#xff09;3.1.1栈的基本概念3.1.2 栈的顺序存储3.1.3栈的链式存储 3.2队列&#xff08;Queue&#xff09;3.2.1队…

【点云抽稀】一种基于均匀分布随机数的点云抽稀算法

文章目录 1. 背景2. 原理3. 实现3.1 定义Utils类3.2 加入预定义宏&#xff0c;确定层级3.3 函数实现 1. 背景 在大数据点云的存储中&#xff0c;常常要进行空间分区&#xff0c;一般的策略是构建四叉树或者八叉树。在构建树的过程中&#xff0c;一个不可避免的点就是点云的快速…

Text, Shapes, Colors 的使用

1. Text 的使用 // 多行文本 // Hello, World! This is the Swiftful Thinking Bootcamp. I am really enjoying this course and learning alot.// .lowercased() 文字小写 .uppercased() 文字大写 capitalized: 以单词形式显示 Text("Hello, World!".capitalized)…

test123

import matplotlib.pyplot as plt import pandas as pd # 从Power BI中获取输入数据 data pd.DataFrame({ Country: [USA, Canada, UK, Germany, France], Population: [328, 38, 66, 83, 67] }) # 使用Matplotlib绘制图表 plt.bar(data[Country], data[Population]…

Sentinel的另外三种流控模式(附代码详细介绍)

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生&#xff0c;在一家满意的公司实习。本篇文章将详细介绍Sentinel的其他三种流控模式&#xff0c;后续文章将详细介绍Sentinel的其他知识。 如果文章有什么需要改进的地方还请大佬不吝赐教&#x1f44f;&#…

轻量应用服务器如何选择之阿里云和腾讯云PK哪个好?

阿里云和腾讯云都有轻量应用服务器&#xff0c;轻量服务器是一种轻量级开箱即用的云服务器&#xff0c;适合小型网站、博客或测试等单机应用&#xff0c;那么问题来了&#xff0c;轻量应用服务器到底是阿里云好还是腾讯云好&#xff1f;阿腾云来详细对比下阿里云轻量应用服务器…

find命令的结果顺序

文章目录 1. 目的2. 准备&#xff1a; 克隆 doxygen 源码3. ubuntu22.04 结果4. ubuntu16.04 结果5. git bash 结果6. 三路比较7. 保持一样的结果&#xff1a; 用自然排序8. References 1. 目的 在研读 doxygen 源码时&#xff0c; 在不同电脑、不同操作系统上使用了 find 命令…

vue2中provide/inject的使用

一般来说&#xff0c;组件之间有以下几种关系&#xff1a; A-B、A-C、B-D、B-E、C-F都是父子关系&#xff0c;B-C、D-E-F是兄弟关系&#xff0c;A-D、A-E、A-F是祖先与孙子关系。 vue2中provide/inject这对选项需要一起使用&#xff0c;以允许一个祖先组件向其所有子孙后代注…

私有化部署即时通讯工具能为企业提升工作沟通效率吗?

在疫情的影响下&#xff0c;越来越多的企业开始采用私有化部署的方式部署即时通讯工具&#xff0c;以提升工作沟通效率。私有化部署的即时通讯工具&#xff0c;能够为企业提供完善的人员管理、安全保障、灵活便捷等优势&#xff0c;帮助企业更好地管理人员、团队协作以及工作沟…

CAMx-Python融合技术与大气污染来源解析方法

详情点击链接&#xff1a;CAMx-Python融合技术应用与大气污染来源解析方法 CAMx模型是一个基于大气化学&#xff0c;针对臭氧、颗粒物和雾霾天气过程的大气污染物计算模型。 1、CAMx模式的区域空气质量模拟配置技术&#xff1b; 2、SMOKE模型的CAMx模式大气排放清单输入准备&…

Kubernetes 二进制部署高可用集群 失败 看报错

概述 openssl证书有问题导致失败&#xff0c;未能解决openssl如何创建私钥&#xff0c;可参考ansible 在私有局域网内完成Kubernetes二进制高可用集群的部署 ETCD Openssl > ca 证书 Haproxy Keepalived Kubernetes 主机规划 序号名字功能VMNET 1备注 1备注 2备注 3 备注…

拉线位移传感器可以用来做的工作

拉线位移传感器可以用来做的工作 拉线位移传感器&#xff0c;是做什么的呢&#xff1f;是测位移的一种传感器&#xff0c;它的使用方式是用拉线测量&#xff0c;所以我们又叫它拉线位移传感器或者拉绳位移传感器。 拉绳位移传感器的应用非常广泛&#xff0c;一般只要精度要求不…

Docker issue failed to solve: rpc error: code = unknown desc

完整错误&#xff1a;failed to solve: rpc error: code Unknown desc failed to solve with frontend dockerfile.v0: failed to create LLB definition: unexpected status code [manifests 8.0-alpine-v3.14-swoole]: 403 Forbidden 解决方案一 重启DockerDesktop或重新启…

JavaScript全解析-继承

继承 ●要知道什么是继承 ●要知道继承的方式有哪些 ●每种的继承方式是如何实现的 什么是继承 ●继承关系出现在构造函数和构造函数之间 ●当构造函数A 的实例使用了 构造函数B 的属性和方法 ●我们就说 构造函数A 继承自 构造函数B ○管 构造函数A 叫做子类 ○管 构造函数B 叫…

MATLAB算法实战应用案例精讲-【数模应用】生存曲线(补充篇)

目录 前言 几个相关概念 生存概率与死亡概率 生存率 生存曲线 事件、生存时间 中位生存时间 生存率的比较 生存数据 风险集 如何读懂KM曲线 应用案例 新药对患者总生存时间的影响-KM曲线 软件操作及结果解读 应用GraphPad Prism制作生存曲线 SPSS绘制生存曲线图 …