再次:在Windows上安装Z3 + Python

1 投票
2 回答
2555 浏览
提问于 2025-04-17 15:44

在之前的一个问题中提到的安装问题依然存在。我尝试在Windows XP SP3 32位和Windows 7 64位上安装Z3 4.3.0和4.1,但无论怎么组合都不行!我可以执行"from z3 import *",但是Z3的dll在初始化时失败。我的Python版本是2.7.3。Z3独立运行和Python独立运行都可以,但它们一起使用时却总是出问题。

我希望能得到一个最新的安装指南,来解答以下问题:

应该使用哪个Z3下载(源代码版本,预编译版本)?

应该使用哪个Python版本?

在init()调用中应该引用哪个Z3的DLL?如果能给个例子就更好了(包括如何处理路径中有空格的字符串)。

应该使用哪些Z3的Python源文件(有些Z3的下载包里有*.py文件,有些则是*.pyc文件)?这些编译过的Python文件是否兼容多个Python版本?

如何设置PATH和PYTHONPATH?

如何调用Python的IDLE shell,以便自动完成Z3的初始化?

抱歉,如果这听起来像是个新手问题,但……

2 个回答

6

Christoph的回答是对的。谢谢!

这里有一些额外的细节,可能对其他人有帮助。

这是修改过的 idle.bat 脚本,适用于 Python 2.7.3 (64-bit)

@echo off
rem Start IDLE using the appropriate Python interpreter
setlocal
set PATH=%PATH%;X:\my\Programme\z3-4.3.0-x64\bin
set PYTHONPATH=X:\my\Programme\z3-4.3.0-x64\bin
set CURRDIR=%~dp0
start "IDLE" "%CURRDIR%..\..\pythonw.exe" "%CURRDIR%idle.pyw" %1 %2 %3 %4 %5 %6 %7 %8 %9
endlocal

要确保 z3 的路径同时在 PATHPYTHONPATH 中。

Python/Idle 终端中的前两条语句:

from z3 import *
init(r"X:\my\Programme\z3-4.3.0-x64\bin\libz3.dll")

(注意'r'表示这是一个原始字符串,反斜杠会被当作普通字符处理)

1

Windows XP不支持在DLL中使用线程本地存储,而Z3需要这个功能。我们现在正在修复这个问题,但即使修复了,你也需要自己编译DLL。

在Windows 7上,应该可以直接使用。不过,你需要确保所有的东西都是64位的,或者都是32位的。如果你使用的是32位的Python版本,它就无法加载64位的DLL,反之亦然。在Python.org网站上,有两个下载选项,其中一个标记为X86-64,这就是64位版本。

最后,libz3.dll和*.pyc/py文件所在的目录需要添加到PYTHONPATH中。你可以在系统设置中进行这个操作(控制面板,系统,高级系统设置,环境变量),这样IDLE也能找到它。

撰写回答