hiroi-sora / Umi-OCR_runtime_linux

Umi-OCR Linux 运行环境
MIT License
29 stars 3 forks source link

在Debian12 gnome desktop下无法启动 #1

Closed Gavin1937 closed 3 months ago

Gavin1937 commented 3 months ago

Debian12 gnome desktop下无法启动。

应该是没有正确加载QtQuick模组导致的。QtQuick.2 已经正确安装到venv里面了。

image

我尝试了以下方案都没用:

  1. 手动把venv里面所有的Qt .so 文件用LD_LIBRARY_PATH指定
  2. 或者设置 QTDIRQML_IMPORT_PATH、和QML2_IMPORT_PATH
  3. 或者直接再系统里装 python3-pyside2* 相关的包。
hiroi-sora commented 3 months ago

嗯,QT确实有坑。我在 Ubuntu 24.04 中也有执行到 import PySide2 时报 Segmentation fault (core dumped) 的错误,在 22.04 中倒是能正常启动。


至于你的问题,是 QQmlApplicationEngine 没有搜索到 QML 相关包导致的。QML包肯定会随着pyside2一起安装,无需系统里额外再装。

在 Windows 中,如果安装路径含中文就可能报这个错。因此我是通过重新注册 相对路径 来避免路径编码问题。

你可以尝试:

Gavin1937 commented 3 months ago

都不行,相对绝对路径都不行,一样的错误。也许是我系统的问题、或者没有配置对

hiroi-sora commented 3 months ago

解决了一个类似的问题,也许能给你参考。

系统: Ubuntu 22.04

症状:

在 VS Code 内置终端中,可以使用下列简单指令,手动启动程序。

UmiOCR-data/venv/bin/python3 UmiOCR-data/main_linux.py

会打印下列警告,但影响不大,主窗口可以显示。

QSocketNotifier: Can only be used with threads started with QThread

而在系统终端中,使用相同的指令启动程序,会在下面这行代码异常退出:

UmiOCR-data/py_src/run.py

    qtApp = QGuiApplication(sys.argv)

报错信息:

~/MyCode/Umi-OCR_Project/Umi-OCR$ UmiOCR-data/venv/bin/python3 UmiOCR-data/main_linux.py

Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl, xcb.

已中止 (核心已转储)

排查问题:

  1. 设置环境变量,提高QT日志级别:

    export QT_DEBUG_PLUGINS=1
  2. 重试 main_linux.py ,打印出如下的日志信息:

    Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
    QFactoryLoader::QFactoryLoader() checking directory path "/home/my/MyCode/Umi-OCR_Project/Umi-OCR/UmiOCR-data/venv/lib/python3.10/site-packages/PySide2/Qt/plugins/platforms" ...
    QFactoryLoader::QFactoryLoader() looking at "/home/my/MyCode/Umi-OCR_Project/Umi-OCR/UmiOCR-data/venv/lib/python3.10/site-packages/PySide2/Qt/plugins/platforms/libqeglfs.so"
    Found metadata in lib /home/my/MyCode/Umi-OCR_Project/Umi-OCR/UmiOCR-data/venv/lib/python3.10/site-packages/PySide2/Qt/plugins/platforms/libqeglfs.so, metadata=

    上述日志指出 libqeglfs.so 这个文件有问题。

  3. 接下来参考 这篇文章 ,查询该文件的关联:

    ldd libqxcb.so

    发现有一个依赖项缺失:

    libxcb-xinerama.so.0 => not found
  4. 安装该依赖:

    sudo apt-get install libxcb-xinerama0
  5. 在系统终端重试 main_linux.py ,已经能启动主界面了。

image

不过比较奇怪的是为什么在 VSC 终端中不会受到该文件缺失的影响。也许 VSC 终端使用的不是 xcb ?

在某些系统中也会存在 xcb缺失 类似的坑,值得留意。

Gavin1937 commented 3 months ago

不太行。打开debug log之后没发现有什么依赖缺失的问题,所有依赖都正常安装了。只能是在启动时没有正确找到QtQuick了。我没有用vscode或者其他ide,全部是手动配置的环境,可能是那一步没弄对。

不过这是开发环境,配置起来麻烦也正常。加上Umi-OCR的项目架构本来就复杂,姑且把这个issue看成是环境没有配置好吧。

debug日志: debug.txt

hiroi-sora commented 3 months ago

我在 Debian12 系统中复现了相同问题,并搞懂了原因。

Umi-OCR依赖的PySide2版本是 5.15.x 。而 Debian12 中,pip支持安装的最新版本是 5.13 。这就导致Umi-OCR以下的代码无法运行:

Main.qml

import QtQuick 2.15

报错:

module "QtQuick" version 2.15 is not installed

解决方法1(不可行):降低代码中 QtQuick 等包的版本,比如

import QtQuick 2.10

不可行:Umi-OCR依赖一些较新的qml API,在落后的包中无法实现。

解决方法2(待测试):

在 Debian 中,手动从源码编译最新的 PySide2 库。


我之后会更新一下 requirements.txt 的版本限制

Gavin1937 commented 3 months ago

python 版本也有限制

image

难怪pypi找不到5.15的版本

Gavin1937 commented 3 months ago

Umi-OCR依赖一些较新的qml API,在落后的包中无法实现。

有没有可能直接把那些依赖新qml API的模块给禁用了?

Gavin1937 commented 3 months ago

行了

image

Debian开发者需要自行安装Python 3.10(网上基本没有现成的安装包,需要自己编译),之后pip就可以正常安装PySide2 5.15了。