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

Mac M2使用Graphviz时提示找不到cairo/libcairo-2求助

解决Mac M2上Graphviz与Cairo依赖报错问题

环境信息

# python3 --version
Python 3.11.2

# brew install graphviz  // (Cairo etc are installed along)
# dot -V                                      
dot - graphviz version 8.1.0 (20230707.0739)
# which dot                                   
/opt/homebrew/bin/dot
# echo $PATH | tr : ' ' | fmt -w1 | grep local
/usr/local/bin

问题代码(task.ipynb)

graphviz_path = '/opt/homebrew/bin/dot'
# graphviz_path = '/usr/local/bin'

import os
os.environ["PATH"] += os.pathsep + graphviz_path

from graphviz import Source
from sklearn import tree
graph = Source( tree.export_graphviz(dtc_model, out_file=None, feature_names=features.columns))

from cairosvg import svg2png

from IPython.display import Image
svg2png(bytestring=graph.pipe(format='svg'),write_to='output.png')
Image("output.png")

报错详情

--> 1 from cairosvg import svg2png
      3 from IPython.display import Image
      4 svg2png(bytestring=graph.pipe(format='svg'),write_to='output.png')

File /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/cairosvg/__init__.py:26
     22 VERSION = __version__ = (ROOT / 'VERSION').read_text().strip()
     25 # VERSION is used in the "url" module imported by "surface"
---> 26 from . import surface  # noqa isort:skip
     29 SURFACES = {
     30     'PDF': surface.PDFSurface,
     31     'PNG': surface.PNGSurface,
   (...)
     34     'SVG': surface.SVGSurface,
     35 }
     38 def svg2svg(bytestring=None, *, file_obj=None, url=None, dpi=96,
     39             parent_width=None, parent_height=None, scale=1, unsafe=False,
     40             background_color=None, negate_colors=False, invert_images=False,
     41             write_to=None, output_width=None, output_height=None):

File /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/cairosvg/surface.py:9
      6 import copy
      7 import io
...
no library called "cairo" was found
no library called "libcairo-2" was found
cannot load library 'libcairo.so.2': dlopen(libcairo.so.2, 0x0002): tried: 'libcairo.so.2' (no such file), '/System/Volumes/Preboot/Cryptexes/OSlibcairo.so.2' (no such file), '/usr/lib/libcairo.so.2' (no such file, not in dyld cache), 'libcairo.so.2' (no such file), '/usr/lib/libcairo.so.2' (no such file, not in dyld cache).  Additionally, ctypes.util.find_library() did not manage to locate a library called 'libcairo.so.2'
cannot load library 'libcairo.2.dylib': dlopen(libcairo.2.dylib, 0x0002): tried: 'libcairo.2.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OSlibcairo.2.dylib' (no such file), '/usr/lib/libcairo.2.dylib' (no such file, not in dyld cache), 'libcairo.2.dylib' (no such file), '/usr/lib/libcairo.2.dylib' (no such file, not in dyld cache).  Additionally, ctypes.util.find_library() did not manage to locate a library called 'libcairo.2.dylib'
cannot load library 'libcairo-2.dll': dlopen(libcairo-2.dll, 0x0002): tried: 'libcairo-2.dll' (no such file), '/System/Volumes/Preboot/Cryptexes/OSlibcairo-2.dll' (no such file), '/usr/lib/libcairo-2.dll' (no such file, not in dyld cache), 'libcairo-2.dll' (no such file), '/usr/lib/libcairo-2.dll' (no such file, not in dyld cache).  Additionally, ctypes.util.find_library() did not manage to locate a library called 'libcairo-2.dll'

解决步骤

  • 修正Graphviz路径设置:代码中把/opt/homebrew/bin/dot加到PATH是错误的,应该添加dot所在的目录/opt/homebrew/bin:

    graphviz_path = '/opt/homebrew/bin'
    import os
    os.environ["PATH"] += os.pathsep + graphviz_path
    

    或者直接用graphviz库的方法指定可执行文件路径:

    from graphviz import set_executable
    set_executable('/opt/homebrew/bin/dot')
    
  • 让Python找到Cairo库:Mac M2上brew安装的Cairo在/opt/homebrew/lib目录,需要告诉Python这个路径:

    1. 在Jupyter Notebook开头添加环境变量设置:
      import os
      os.environ["DYLD_LIBRARY_PATH"] = "/opt/homebrew/lib" + os.pathsep + os.environ.get("DYLD_LIBRARY_PATH", "")
      
    2. 或者在启动Jupyter前,在终端执行:
      export DYLD_LIBRARY_PATH=/opt/homebrew/lib:$DYLD_LIBRARY_PATH
      
  • 重新安装pycairo(推荐):用brew安装pycairo,自动关联brew版Cairo,避免路径问题:

    pip uninstall pycairo
    brew install pycairo
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 18:05:06