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环境中缺少该库,或者已安装的库存在版本/架构不匹配问题。
从错误回溯链可以明确依赖关系:
- Custom_Widgets的
SvgToPngIcons模块导入了cairosvg cairosvg依赖cairocffi,而cairocffi需要加载系统中的Cairo动态链接库(如libcairo-2.dll)- 系统无法找到可用的Cairo库,或已安装的GTK3 Runtime中的Cairo库存在依赖缺失(错误码0xc1通常表示库的依赖组件不完整,或Python环境与库的架构不兼容)
解决方案
- 安装适配的Cairo库:
- 下载与你的Python环境(32/64位)匹配的GTK3 Runtime安装包
- 安装时使用默认路径,或手动将GTK3的
bin目录(例如C:\Program Files\GTK3-Runtime Win64\bin)添加到系统环境变量PATH中 - 重启终端或IDE后重新运行项目
- 验证库是否可用:安装完成后,在命令行执行
where libcairo-2.dll,确认系统能找到该库的路径 - 替代方案(不推荐):如果不需要Custom_Widgets的SVG转PNG功能,可以尝试修改模块导入逻辑跳过相关代码,但可能导致部分UI功能失效
内容的提问来源于stack exchange,提问作者Marcelo Delgado
相关产品推荐
相关产品推荐

