Pyswip错误:系统找不到指定的注册表项或值

时间:2018-12-21 15:23:12

标签: python prolog pycharm

我想在项目中使用 pyswip 。我试图通过Pycharm安装pyswip。它可以成功安装。

  • 操作系统:Windows 10 64位
  • IDE: Pycharm 2018.3.2
  • 语言:Python 3.7
  • Pyswip版本: 0.2.7

问题是当我尝试运行快速运行的测试时(下面的示例代码取自Pyswip installation guide

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

出现错误

ERROR: The system was unable to find the specified registry key or value.
Traceback (most recent call last):
  File "C:/Users/Coregame/PycharmProjects/Project1/test.py", line 1, in <module>
from pyswip import Prolog
  File "C:\Users\Coregame\PycharmProjects\Project1\venv\lib\site-packages\pyswip\__init__.py", line 29, in <module>
from pyswip.prolog import Prolog
  File "C:\Users\Coregame\PycharmProjects\Project1\venv\lib\site-packages\pyswip\prolog.py", line 28, in <module>
from pyswip.core import *
  File "C:\Users\Coregame\PycharmProjects\Project1\venv\lib\site-packages\pyswip\core.py", line 568, in <module>
(_path, SWI_HOME_DIR) = _findSwipl()
  File "C:\Users\Coregame\PycharmProjects\Project1\venv\lib\site-packages\pyswip\core.py", line 411, in _findSwipl
(path, swiHome) = _findSwiplWin()
  File "C:\Users\Coregame\PycharmProjects\Project1\venv\lib\site-packages\pyswip\core.py", line 208, in _findSwiplWin
    match = pattern.match(ret[-1])
IndexError: list index out of range

我该怎么办?预先感谢!

3 个答案:

答案 0 :(得分:0)

您可能会使用已安​​装32位SWI Prolog的64位pyswip。从here安装64位SWI Prolog,尽管您将无法使用SWI Prolog编辑器,但它应该可以解决问题。

答案 1 :(得分:0)

我之前遇到此错误是因为我的Python是64位的,所以我刚安装了32位的Python,它就可以工作。

答案 2 :(得分:0)

除了确保您的 Python 和 SWI Prolog 都是 32 位或 64 位之外,SWI Prolog 的 bin 文件夹需要位于您的系统路径中,以便 Python 的导入可以找到它。您可以像这样在 Python 脚本中执行此操作:

swipath = 'C:\\Program Files\\swipl\\bin'
import os
os.environ['PATH'] = swipath + os.pathsep + os.environ['PATH']

只需确保将其放在 import Prolog 语句上方即可。

或者,通过 Windows 设置应用程序通过搜索“为您的帐户编辑环境变量”来编辑您帐户的“路径”环境变量,双击“路径”,单击“新建”按钮并浏览或键入swipl\bin 文件夹的完整路径,然后单击“确定”。