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

先导入ruamel.yaml再用qtpy替代PySide6引发RuntimeWarning求助

ruamel.yaml 导入顺序引发 QtPy + PySide6 运行时警告的问题

问题复现

若在导入Qt类前先导入ruamel.yaml(即使未实际使用),将PySide6原生导入替换为QtPy后会触发大量RuntimeWarning。以下脚本可复现该问题:

import sys
from ruamel.yaml import YAML as rYAML # 关键:该导入在QtPy之前
from qtpy.QtWidgets import QApplication, QLabel

# 创建应用与部件
app = QApplication(sys.argv)
label = QLabel("Hello World!")
label.resize(400, 200)
label.show()

sys.exit(app.exec())

警告现象

运行后会输出类似如下的RuntimeWarning:

shibokensupport/signature/parser.py:265: RuntimeWarning: pyside_type_init:_resolve_value

        UNRECOGNIZED:   'PySide6.QtWidgets.QFileDialog.ViewMode'
        OFFENDING LINE: 'PySide6.QtWidgets.QFileDialog.viewMode(self)->PySide6.QtWidgets.QFileDialog.ViewMode'

当前环境版本

  • ruamel.yaml 0.19.1
  • qtpy 2.4.3
  • PySide6 6.11.0

解决办法

1. 调整导入顺序(推荐)

将QtPy/PySide6相关导入移至ruamel.yaml之前,让PySide6先完成类型解析初始化,避免被ruamel.yaml的导入钩子干扰:

import sys
from qtpy.QtWidgets import QApplication, QLabel
from ruamel.yaml import YAML as rYAML # 移至Qt导入之后

app = QApplication(sys.argv)
label = QLabel("Hello World!")
label.resize(400, 200)
label.show()

sys.exit(app.exec())

2. 升级依赖版本

检查并升级ruamel.yaml或QtPy至最新稳定版,新版本可能已修复此类兼容性冲突:

  • 尝试升级ruamel.yaml到0.19.2及以上版本
  • 尝试升级QtPy到2.5.0及以上版本

3. 预加载PySide6类型解析模块(临时方案)

若无法调整导入顺序,可在导入ruamel.yaml前先预加载shibokensupport模块,触发PySide6的类型初始化:

import sys
# 预加载PySide6类型解析依赖
import shibokensupport.signature.parser
from ruamel.yaml import YAML as rYAML
from qtpy.QtWidgets import QApplication, QLabel

app = QApplication(sys.argv)
label = QLabel("Hello World!")
label.resize(400, 200)
label.show()

sys.exit(app.exec())

问题原因

ruamel.yaml在导入过程中会修改Python的导入钩子或类型注解解析逻辑,而PySide6的shibokensupport模块在解析Qt类的函数签名时依赖原生的类型解析流程。QtPy作为跨Qt框架兼容层,在转发导入时会触发这一未被ruamel.yaml兼容的解析步骤,导致签名解析失败并抛出警告。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 17:53:10