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

PySide2导入Custom_Widgets报错:找不到cairo库求解决方案

问题:PySide2项目导入Custom_Widgets时触发OSError(Cairo库缺失)

项目主代码

from PySide2.QtWidgets import QMainWindow
from views.Main_Menu import MainWindow
from Custom_Widgets.Widgets import *
from PySide2.QtWidgets import QApplication
import sys

class MainMenu_Controller(QMainWindow, MainWindow):
    def __init__(self):
        super().__init__()
        self.ui=MainWindow()
        self.ui.setupUi(self)
        loadJsonStyle(self,self.ui)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window=MainWindow()
    window.show()
    sys.exit(app.exec_())

JSON样式配置文件

{
"QMainWindow":[
    {
        "tittle":"Control de Impuestos",
        "icon":":/Iconos/assets/Iconos/framer.svg",
        "frameless":true,
        "transluscentBg":true,
        "sizeGrip":"sizeGrip",
        "navigation":[
            {
                "minimize":"Minimize",
                "close":"Close",
                "restore":[
                    {
                        "buttonName":"Restorebtn",
                        "normalIcon":":/Iconos/assets/Iconos/minimize-2.svg",
                        "maximizedIcon":":/Iconos/assets/Iconos/maximize-2.svg"
                    }
                ],
                "moveWindow":"TopMenuContainer",
                "tittleBar":"TopMenuContainer"
            }
        ]
    }
]
}

错误回溯信息

Traceback (most recent call last):
  File "c:\Users\Marce\Downloads\responsive ui\custom qmenu\main.py", line 18, in <module>
from ui_interface import *
File "C:\Users\Marce\Downloads\responsive ui\env\Lib\site-packages\shiboken2\files.dir\shibokensupport\__feature__.py", line 142, in _import
return original_import(name, *args, **kwargs)
File "c:\Users\Marce\Downloads\responsive ui\custom qmenu\ui_interface.py", line 15, in <module>
from Custom_Widgets.Widgets import QCustomSlideMenu
File "C:\Users\Marce\Downloads\responsive ui\env\Lib\site-packages\shiboken2\files.dir\shibokensupport\__feature__.py", line 142, in _import
return original_import(name, *args, **kwargs)
File "C:\Users\Marce\Downloads\responsive ui\env\lib\site-packages\Custom_Widgets\Widgets.py", line 19, in <module>
from .Qss import SassCompiler
File "C:\Users\Marce\Downloads\responsive ui\env\Lib\site-packages\shiboken2\files.dir\shibokensupport\__feature__.py", line 142, in _import
return original_import(name, *args, **kwargs)
File "C:\Users\Marce\Downloads\responsive ui\env\lib\site-packages\Custom_Widgets\Qss\SassCompiler.py", line 20, in <module>
from . SvgToPngIcons import NewIconsGenerator
File "C:\Users\Marce\Downloads\responsive ui\env\Lib\site-packages\shiboken2\files.dir\shibokensupport\__feature__.py", line 142, in _import
return original_import(name, *args, **kwargs)
File "C:\Users\Marce\Downloads\responsive ui\env\lib\site-packages\Custom_Widgets\Qss\SvgToPngIcons.py", line 1, in <module>
import cairosvg
File "C:\Users\Marce\Downloads\responsive ui\env\Lib\site-packages\shiboken2\files.dir\shibokensupport\__feature__.py", line 142, in _import
return original_import(name, *args, **kwargs)
File "C:\Users\Marce\Downloads\responsive ui\env\lib\site-packages\cairosvg\__init__.py", line 26, in <module>
from . import surface  # noqa isort:skip
File "C:\Users\Marce\Downloads\responsive ui\env\Lib\site-packages\shiboken2\files.dir\shibokensupport\__feature__.py", line 142, in _import
return original_import(name, *args, **kwargs)
File "C:\Users\Marce\Downloads\responsive ui\env\lib\site-packages\cairosvg\surface.py", line 9, in <module>
import cairocffi as cairo
File "C:\Users\Marce\Downloads\responsive ui\env\Lib\site-packages\shiboken2\files.dir\shibokensupport\__feature__.py", line 142, in _import
return original_import(name, *args, **kwargs)
File "C:\Users\Marce\Downloads\responsive ui\env\lib\site-packages\cairocffi\__init__.py", line 48, in <module>
cairo = dlopen(
File "C:\Users\Marce\Downloads\responsive ui\env\lib\site-packages\cairocffi\__init__.py", line 45, in dlopen
raise OSError(error_message)  # pragma: no cover
OSError: no library called "cairo-2" was found
no library called "cairo" was found
cannot load library 'C:\Program Files\GTK3-Runtime Win64\bin\libcairo-2.dll': error 0xc1
cannot load library 'libcairo.so.2': error 0x7e
cannot load library 'libcairo.2.dylib': error 0x7e
cannot load library 'libcairo-2.dll': error 0x7e

OSError: no library called "cairo-2" was found
no library called "cairo" was found
no library called "libcairo-2" was found
cannot load library 'libcairo.so.2': error 0x7e
cannot load library 'libcairo.2.dylib': error 0x7e
cannot load library 'libcairo-2.dll': error 0x7e

原因分析

这个错误的核心原因是Custom_Widgets依赖的cairosvg库需要系统级的Cairo图形库支持,但你的Windows环境中缺少该库,或者已安装的库存在版本/架构不匹配问题。

从错误回溯链可以明确依赖关系:

  1. Custom_Widgets的SvgToPngIcons模块导入了cairosvg
  2. cairosvg依赖cairocffi,而cairocffi需要加载系统中的Cairo动态链接库(如libcairo-2.dll)
  3. 系统无法找到可用的Cairo库,或已安装的GTK3 Runtime中的Cairo库存在依赖缺失(错误码0xc1通常表示库的依赖组件不完整,或Python环境与库的架构不兼容)

解决方案

  • 安装适配的Cairo库:
    1. 下载与你的Python环境(32/64位)匹配的GTK3 Runtime安装包
    2. 安装时使用默认路径,或手动将GTK3的bin目录(例如C:\Program Files\GTK3-Runtime Win64\bin)添加到系统环境变量PATH中
    3. 重启终端或IDE后重新运行项目
  • 验证库是否可用:安装完成后,在命令行执行where libcairo-2.dll,确认系统能找到该库的路径
  • 替代方案(不推荐):如果不需要Custom_Widgets的SVG转PNG功能,可以尝试修改模块导入逻辑跳过相关代码,但可能导致部分UI功能失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:54:19