Ubuntu环境下带Yolo的PySide6应用pyside6-deploy打包失败求助
问题场景
在Ubuntu 20.04.6 LTS系统的Python 3.8.10虚拟环境中,构建集成YOLO等机器学习功能的PySide6独立应用,执行pyside6-deploy mainwindow.py耗时约3小时后失败,错误输出翻译如下:
正在收集 nuitka==1.8.0 使用缓存的 Nuitka-1.8-cp38-cp38-linux_x86_64.whl 正在收集 ordered-set>=4.1.0 (依赖自 nuitka==1.8.0) 使用缓存的 ordered_set-4.1.0-py3-none-any.whl.metadata (5.3 kB) 正在收集 zstandard>=0.15 (依赖自 nuitka==1.8.0) 使用缓存的 zstandard-0.23.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.0 kB) 使用缓存的 ordered_set-4.1.0-py3-none-any.whl (7.6 kB) 使用缓存的 zstandard-0.23.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB) 正在安装收集到的包:zstandard, ordered-set, nuitka 尝试卸载:zstandard 发现已安装版本:zstandard 0.23.0 正在卸载 zstandard-0.23.0: 成功卸载 zstandard-0.23.0 尝试卸载:ordered-set 发现已安装版本:ordered-set 4.1.0 正在卸载 ordered-set-4.1.0: 成功卸载 ordered-set-4.1.0 尝试卸载:nuitka 发现已安装版本:Nuitka 1.8 正在卸载 Nuitka-1.8: 成功卸载 Nuitka-1.8 成功安装 nuitka-1.8 ordered-set-4.1.0 zstandard-0.23.0 [提示] pip有新版本可用:24.0 -> 24.2 [提示] 更新命令:pip install --upgrade pip Nuitka插件:警告:anti-bloat:在'triton.common.build'中检测到不期望的'setuptools'导入(本应避免导入),路径为 '/home/navaneeth/workspace/OMS/tensorflow_env/lib/python3.8/site-packages/triton/common/build.py:10'。这可能会减慢编译速度。 Nuitka插件:警告: 这是复杂问题!更多信息可参考相关文档 Nuitka插件:警告:anti-bloat:在'torch._dynamo.testing'中检测到不期望的'unittest'导入(本应避免导入),路径为 '/home/navaneeth/workspace/OMS/tensorflow_env/lib/python3.8/site-packages/torch/_dynamo/testing.py:10'。这可能会减慢编译速度。 Nuitka插件:警告: 这是复杂问题!更多信息可参考相关文档 Nuitka插件:警告:anti-bloat:在'ultralytics.utils.checks'中检测到不期望的'IPython'导入(本应避免导入),路径为 '/home/navaneeth/workspace/OMS/tensorflow_env/lib/python3.8/site-packages/ultralytics/utils/checks.py:574'。这可能会减慢编译速度。 Nuitka插件:警告: 这是复杂问题!更多信息可参考相关文档 Nuitka插件:警告:anti-bloat:在'ultralytics.utils.checks'中检测到不期望的'IPython'导入(本应避免导入),路径为 '/home/navaneeth/workspace/OMS/tensorflow_env/lib/python3.8/site-packages/ultralytics/utils/checks.py:574'。这可能会减慢编译速度。 Nuitka插件:警告: 这是复杂问题!更多信息可参考相关文档 {标准输入}: 汇编器消息: {标准输入}:48541: 警告:文件未在换行处结束;已插入换行符 {标准输入}:49639: 错误:`jmp`指令操作数数量不匹配 {标准输入}: 错误:文件末尾存在未关闭的CFI;缺少.cfi_endproc指令 gcc: 致命错误:Killed信号终止了程序cc1 编译终止。 scons: *** [module.yt_dlp.extractor.lazy_extractors.o] 错误 1 [DEPLOY] 发生异常:回溯(最近的调用最后): 文件 "/home/navaneeth/workspace/OMS/tensorflow_env/lib/python3.8/site-packages/PySide6/scripts/deploy_lib/commands.py", 第24行, 在 run_command subprocess.check_call(command, shell=is_windows) 文件 "/usr/lib/python3.8/subprocess.py", 第364行, 在 check_call raise CalledProcessError(retcode, cmd) subprocess.CalledProcessError: 命令 '['/home/navaneeth/workspace/OMS/tensorflow_env/bin/python', '-m', 'nuitka', '/home/navaneeth/workspace/OMS/action_detection/standalone_app/Qt-App-4-deploy/mainwindow.py', '--follow-imports', '--onefile', '--enable-plugin=pyside6', '--output-dir=/home/navaneeth/workspace/OMS/action_detection/standalone_app/Qt-App-4-deploy/deployment', '--quiet', '--noinclude-qt-translations', '--linux-icon=/home/navaneeth/workspace/OMS/tensorflow_env/lib/python3.8/site-packages/PySide6/scripts/deploy_lib/pyside_icon.jpg']' 返回非零退出状态 1。 处理上述异常期间,发生新的异常: 回溯(最近的调用最后): 文件 "/home/navaneeth/workspace/OMS/tensorflow_env/lib/python3.8/site-packages/PySide6/scripts/deploy.py", 第102行, 在 main command_str = python.create_executable(source_file=config.source_file, 文件 "/home/navaneeth/workspace/OMS/tensorflow_env/lib/python3.8/site-packages/PySide6/scripts/deploy_lib/python_helper.py", 第200行, 在 create_executable command_str = self.nuitka.create_executable(source_file=source_file, 文件 "/home/navaneeth/workspace/OMS/tensorflow_env/lib/python3.8/site-packages/PySide6/scripts/deploy_lib/nuitka_helper.py", 第65行, 在 create_executable command_str, _ = run_command(command=command, dry_run=dry_run) 文件 "/home/navaneeth/workspace/OMS/tensorflow_env/lib/python3.8/site-packages/PySide6/scripts/deploy_lib/commands.py", 第30行, 在 run_command raise RuntimeError( RuntimeError: [DEPLOY] 命令 /home/navaneeth/workspace/OMS/tensorflow_env/bin/python -m nuitka /home/navaneeth/workspace/OMS/action_detection/standalone_app/Qt-App-4-deploy/mainwindow.py --follow-imports --onefile --enable-plugin=pyside6 --output-dir=/home/navaneeth/workspace/OMS/action_detection/standalone_app/Qt-App-4-deploy/deployment --quiet --noinclude-qt-translations --linux-icon=/home/navaneeth/workspace/OMS/tensorflow_env/lib/python3.8/site-packages/PySide6/scripts/deploy_lib/pyside_icon.jpg 执行失败,错误信息:命令 '['/home/navaneeth/workspace/OMS/tensorflow_env/bin/python', '-m', 'nuitka', '/home/navaneeth/workspace/OMS/action_detection/standalone_app/Qt-App-4-deploy/mainwindow.py', '--follow-imports', '--onefile', '--enable-plugin=pyside6', '--output-dir=/home/navaneeth/workspace/OMS/action_detection/standalone_app/Qt-App-4-deploy/deployment', '--quiet', '--noinclude-qt-translations', '--linux-icon=/home/navaneeth/workspace/OMS/tensorflow_env/lib/python3.8/site-packages/PySide6/scripts/deploy_lib/pyside_icon.jpg']' 返回非零退出状态 1。返回码1
核心错误分析
- 内存耗尽:
gcc: fatal error: Killed signal terminated program cc1说明编译过程中系统因内存不足杀死了编译进程,这是长时间编译后失败的主要诱因。 - 汇编代码兼容性问题:
jmp操作数不匹配、CFI未关闭的错误,是Nuitka生成的汇编代码与当前gcc版本不兼容导致的。 - 冗余依赖打包:日志中失败点在
yt_dlp模块,说明--follow-imports参数打包了大量无关依赖,加剧了内存占用和编译复杂度。
解决方案
1. 缓解内存压力
- 启用交换分区:
sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile - 限制编译进程数:在打包命令中添加
--jobs=N参数(N为CPU核心数的一半,比如4核机器用--jobs=2),减少并行编译的内存消耗。
2. 修复汇编兼容性
- 更新Nuitka到最新版:
pip install --upgrade nuitka - 升级gcc版本:Ubuntu 20.04默认gcc为9.x,升级到gcc 11可解决部分汇编代码问题:
sudo apt install gcc-11 g++-11 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 100
3. 优化打包依赖
- 替换
--follow-imports:改用--nofollow-imports配合--include-module手动指定核心依赖,避免打包yt_dlp这类无关模块。 - 排除冗余模块:添加
--exclude-module=IPython --exclude-module=unittest参数,移除Ultralytics中的测试/调试依赖。
4. 放弃单文件打包
去掉--onefile参数,改用目录模式打包,大幅降低内存占用和编译复杂度,后续可通过tar或打包工具整合目录。
内容的提问来源于stack exchange,提问作者Navaneeth K R
相关产品推荐
相关产品推荐

