Intel Mac安装Imfit库后导入报错:dlopen() Symbol not found
在Intel芯片的Mac上通过pip3 install pyimfit安装Imfit库后,在Jupyter中执行import pyimfit时出现以下错误:
ImportError Traceback (most recent call last)
Input In [1], in <cell line: 1>()
----> 1 import pyimfit as im
2 import scipy as sc
3 import numpy as npFile /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pyimfit/init.py:4, in <module>
1 # This file defines what is visible to the outside world when the package
2 # (pyimfit) is imported
3 from .descriptions import *
----> 4 from .pyimfit_lib import convolve_image, make_imfit_function, ModelObjectWrapper # type: ignore
5 from .pyimfit_lib import FixImage
6 from .pyimfit_lib import PsfOversamplingImportError: dlopen(/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pyimfit/pyimfit_lib.cpython-39-darwin.so, 2): Symbol not found: __ZTTNSt3__114basic_ifstreamIcNS_11char_traitsIcEEEE
Referenced from: /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pyimfit/pyimfit_lib.cpython-39-darwin.so
Expected in: /usr/lib/libc++.1.dylib
in /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pyimfit/pyimfit_lib.cpython-39-darwin.so
已尝试多次通过pip重新安装该库,也重装了Numpy/Scipy等依赖项,但问题未解决。
这个错误源于预编译的pyimfit库使用了系统自带libc++.1.dylib不支持的C++标准库符号,导致兼容性问题。可尝试以下方案:
方案1:通过conda安装pyimfit
conda提供的预编译包会处理系统库兼容性,执行命令:
conda install -c conda-forge pyimfit
若未配置conda环境,先安装Miniconda或Anaconda,创建并激活新环境后再执行上述命令。
方案2:从源码编译安装pyimfit
- 卸载已安装的pyimfit:
pip3 uninstall -y pyimfit
- 安装编译依赖:
brew install cmake gcc
- 获取pyimfit源码包,解压后进入源码目录。
- 编译并安装:
pip3 install .
本地编译会生成适配当前系统的库文件,规避预编译包的兼容性问题。
方案3:升级系统版本(谨慎操作)
若Mac系统版本较旧,可升级到最新macOS版本,系统会自动更新自带的libc++.1.dylib库以支持缺失的符号。升级前请备份重要数据。
内容的提问来源于stack exchange,提问作者prm.d

