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

使用pyswip触发Assertion failed错误的原因及解决方法

问题:pyswip运行触发Assertion failed错误(pl-fli.c:2637)

错误详情

执行以下测试代码时:

from pyswip import Prolog
prolog = Prolog()
prolog.assertz("father(michael,john)")

触发错误:Assertion failed: 0, file /home/swipl/src/swipl-devel/src/pl-fli.c, line 2637

环境:

  • Windows 10 + Python 3.11.1(已配置SWI-Prolog系统路径)
  • WSL Ubuntu环境下测试同样报错

原因

核心原因是pyswip与SWI-Prolog版本不兼容。pl-fli.c是SWI-Prolog对外语言接口(FLI)的核心文件,断言失败说明pyswip调用的FLI接口与当前安装的SWI-Prolog版本不匹配——尤其是SWI-Prolog 9.x系列对FLI做了底层修改,而官方稳定版pyswip尚未适配该版本。

解决办法

1. 降级SWI-Prolog到兼容版本

安装SWI-Prolog 8.x系列(推荐8.2.4),该版本与多数稳定版pyswip完全兼容:

  • Windows:下载对应8.x版本的安装包,安装后确认swipl.exe所在路径已加入系统环境变量
  • WSL Ubuntu:通过apt指定版本安装:
    sudo apt-get install swi-prolog=8.2.4-1
    

2. 安装适配SWI-Prolog 9.x的pyswip分支

如果不想降级SWI-Prolog,可以安装社区维护的适配9.x版本的pyswip分支:

pip install git+https://github.com/yuce/pyswip.git@swipl-9.x

3. 验证Python版本兼容性

虽然Python 3.11本身支持pyswip,但如果使用的是非常老旧的pyswip版本,可能存在兼容性问题。若上述方法无效,可临时降级到Python 3.10再测试。

内容的提问来源于stack exchange,提问作者Alejandro Martín

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:42:12