在本地使用Z3Py

时间:2012-06-27 17:24:22

标签: python z3 smt

我在Windows XP上通过IDLE GUI使用Python 2.7.3,我正试图通过Python API在本地运行Z3 4.0。

这条线很好用:

>>> from z3 import *

这一行没有:

>>> x = Int('x')

Traceback (most recent call last):
[...]
  File "C:\Program Files\Microsoft Research\Z3-4.0\python\z3core.py", line 34, in init
    _lib = ctypes.CDLL(PATH)
  File "C:\Python27\lib\ctypes\__init__.py", line 365, in __init__
    self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126] The specified module could not be found

任何人都知道问题可能是什么?

我的PYTHONPATH设置为“C:\ Program Files \ Microsoft Research \ Z3-4.0 \ python”,没有引号。

2 个答案:

答案 0 :(得分:1)

Z3使用线程本地存储。它是使用__declspec(thread)实现的。不幸的是,Windows XP和Server 2003中的DLL不支持此功能。从MSN文档:

"对于在进程启动后以动态方式加载的DLL(延迟加载,COM对象,显式LoadLibrary等),__ declspec(thread)在Windows XP,2003 Server和早期操作系统上不起作用,但确实有效在Vista和2008 Server上。"

因此,要使用Z3 DLL,您必须使用以下Windows之一:8,7,Vista或Server 2008。

答案 1 :(得分:0)

在Windows XP上,文件名中可能存在空格问题,导致python无法找到z3.dll;这似乎是一个普遍的python问题,例如: some notes on PYTHONPATH

如果使用旧的8.3格式的目录,它可能会起作用。您可以通过在命令shell中找到Z3目录找到短名称(我使用dir / x查看Windows 7上的短名称),在我的系统上,短路径为C:\ progra~1 \ mi4430~1 \ z3 -4.0 \ bin中。这些数字在每次安装时都有所不同。

更快的解决方案可能是简单地将bin目录中的z3.dll复制到python目录(如果你使用的是64位,则从x64目录复制)。