You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Nuitka打包PyQt5应用后无法运行的问题求助

Nuitka打包PyQt5应用后报错找不到fleep/data.json

问题详情

源码运行无异常,但使用Nuitka打包后执行报错,核心错误为:

📢 Tips: QFluentWidgets Pro is now released. Click https://qfluentwidgets.com/pages/pro to learn more about it.

Traceback (most recent call last):
  File "C:\Users\18079\DOCUME~1\DOWNLO~1\MUSICD~1.DIS\MusicDownloader.py", line 4, in <module>
  File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
  File "C:\Users\18079\DOCUME~1\DOWNLO~1\MUSICD~1.DIS\window\main.py", line 6, in <module window.main>
  File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
  File "C:\Users\18079\DOCUME~1\DOWNLO~1\MUSICD~1.DIS\Interface\settings.py", line 11, in <module Interface.settings>
  File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
  File "C:\Users\18079\DOCUME~1\DOWNLO~1\MUSICD~1.DIS\helper\localmusicsHelper.py", line 9, in <module helper.localmusicsHelper>
  File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
  File "C:\Users\18079\DOCUME~1\DOWNLO~1\MUSICD~1.DIS\fleep\__init__.py", line 15, in <module fleep>
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\18079\\DOCUME~1\\DOWNLO~1\\MUSICD~1.DIS\\fleep\\data.json'

当前使用的打包命令:

nuitka --standalone --plugin-enable=pyqt5 --windows-icon-from-ico=icon.ico MusicDownloader.py

环境信息:

C:\Users\18079>nuitka --version
2.3.4
Commercial: None
Python: 3.11.9 (tags/v3.11.9:de54cf5, Apr  2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]
Flavor: CPython Official
Executable: C:\Users\18079\AppData\Local\Programs\Python\Python311\python.exe
OS: Windows
Arch: x86_64
WindowsRelease: 11
Nuitka-Scons: Non downloaded winlibs-gcc 'C:\Users\18079\Documents\mingw64\bin\gcc.exe' is being ignored, Nuitka is very
Nuitka-Scons: dependent on the precise one.
Version C compiler: ~\AppData\Local\Nuitka\Nuitka\Cache\DOWNLO~1\gcc\x86_64\13.2.0-16.0.6-11.0.1-msvcrt-r1\mingw64\bin\gcc.exe (gcc 13.2.0).

重装系统前可正常打包运行,目前无论是否使用管理员权限、在不同电脑上执行打包后的程序均报错。

解决方案

报错原因是Nuitka未自动识别并打包fleep库依赖的data.json资源文件,可通过以下方式解决:

1. 显式指定包含资源文件

修改打包命令,添加--include-data-files参数,指定源文件路径和打包后的目标路径(需替换为你实际的fleep安装路径):

nuitka --standalone --plugin-enable=pyqt5 --windows-icon-from-ico=icon.ico --include-data-files="C:\Users\18079\AppData\Local\Programs\Python\Python311\Lib\site-packages\fleep\data.json=fleep/data.json" MusicDownloader.py

格式说明:=左侧是本地Python环境中data.json的实际路径,右侧是打包后程序内的相对路径,需与fleep源码中读取文件的路径一致。

2. 修改fleep源码适配打包

找到fleep库的__init__.py文件,将原有的相对路径读取方式改为Python标准库的资源读取方式,让Nuitka能自动识别资源:
原代码(大概在第15行):

with open('data.json', 'r') as f:
    # 读取文件内容逻辑

修改为:

import importlib.resources

# 直接读取资源内容
data_content = importlib.resources.read_text('fleep', 'data.json')
# 后续使用data_content处理逻辑

修改后重新执行原打包命令即可。

3. 尝试通用包数据包含参数

如果fleep库的配置文件中已声明了包数据,可使用--include-package-data参数自动打包该库的所有资源:

nuitka --standalone --plugin-enable=pyqt5 --windows-icon-from-ico=icon.ico --include-package-data=fleep MusicDownloader.py

补充说明

重装系统后出现问题的可能原因:重装后Nuitka版本、Python环境发生变化,旧环境可能因版本特性自动处理了资源打包,新版本需要显式指定包含非代码类资源文件。

内容的提问来源于stack exchange,提问作者ChenMo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 19:38:11