Mac系统使用pyswip时出现libpl(shared)未找到错误求助
我之前在Mac上折腾pyswip的时候也碰到过一模一样的问题——装了Homebrew的高版本SWI-Prolog,还做了2to3转换,结果还是卡在这里。试了好几个方法终于搞定了,给你分享几个可行的解决方案:
方案1:手动指定SWI-Prolog的库路径
pyswip有时候找不到Homebrew安装的SWI-Prolog的共享库位置,我们可以在代码里手动设置环境变量告诉它路径:
首先用命令找到libpl.dylib的位置:
- Intel Mac:
find /usr/local -name "libpl.dylib" - M系列Mac:
find /opt/homebrew -name "libpl.dylib"
找到之后,在你的Python代码开头加上这段:
from pyswip import Prolog import os # 替换成你实际查到的路径 os.environ['SWI_HOME_DIR'] = '/opt/homebrew/Cellar/swi-prolog/8.2.4/lib/swipl/lib/x86_64-darwin' # 现在再初始化Prolog就应该能找到库了 prolog = Prolog()
方案2:创建软链接到系统默认搜索目录
如果不想每次写代码都指定路径,可以把libpl.dylib链接到系统库目录,让pyswip能自动找到:
还是先确认你的SWI-Prolog版本和库路径,比如用swipl --version看版本号,然后执行:
# M系列Mac示例,替换成你的实际路径 sudo ln -s /opt/homebrew/Cellar/swi-prolog/8.2.4/lib/swipl/lib/x86_64-darwin/libpl.dylib /usr/local/lib/libpl.dylib
Intel Mac的话把开头的/opt/homebrew换成/usr/local就行。
方案3:修改pyswip源码的库查找逻辑
如果上面两个方法都不行,你可以直接修改pyswip的源码,把Homebrew的路径加入到它的库搜索列表里:
- 找到pyswip安装目录下的
prolog.py文件(可以用pip show pyswip看安装路径) - 找到
_locateSWIPL函数,里面有一个搜索路径的列表 - 把你找到的SWI-Prolog库路径添加到这个列表里,比如:
paths = [ # 原来的路径保留 "/opt/homebrew/Cellar/swi-prolog/8.2.4/lib/swipl/lib/x86_64-darwin", # 其他路径... ]
另外还要确认一下,Homebrew安装的SWI-Prolog确实包含共享库,一般默认是带的,你可以用brew info swi-prolog查看安装信息,确认没有遗漏相关组件。
内容的提问来源于stack exchange,提问作者William Song
相关产品推荐
相关产品推荐

