【问题标题】:How do I use the Z3Py dll?如何使用 Z3Py dll?
【发布时间】:2018-10-27 03:58:43
【问题描述】:

我尝试使用 Z3Py dll,但没有成功。这是我的测试程序和错误。我对 Python 很陌生,我想我错过了一些大家都知道的重要部分。

init("z3.dll")

Traceback (most recent call last):
File "test5.py", line 1, in <module>
    init("z3.dll")

NameError: name 'init' 未定义

我还尝试了另一种加载 dll 的方法:

import ctypes
so = ctypes.WinDLL('./z3.dll')     #for windows
print(so)
s = Solver()

<WinDLL './z3.dll', handle 10000000 at 0x10b15f0>
Traceback (most recent call last):
  File "test5.py", line 5, in <module>
    s = Solver()
NameError: name 'Solver' is not defined

【问题讨论】:

    标签: python dll z3 smt z3py


    【解决方案1】:

    通常,您只需导入 z3:

    from z3 import *
    
    s = Solver()
    x = Int("x")
    s.add(x > 5)
    s.check()
    print s.model()
    

    当您运行这个简单的脚本时会发生什么?

    【讨论】:

    • 它有效。我已经用 import z3 完成了我的程序。现在想在没有z3py的电脑上运行,所以我尝试了dll。
    • 你不能那样做。 DLL 包含 Z3 的核心功能(从 C++ 导出),但您仍然需要安装 Z3py 才能拥有所有包装器功能。 (就像Solver 类和周围的所有其他pythonic 习语。)
    • 非常感谢。那么函数 init() 是用来在导入后加载 z3 内核的吗?喜欢 z3.init() 吗?
    • 每当您引用 Z3py 函数时,该库将自动初始化 DLL 并使核心功能可用。这发生在幕后。在极少数情况下(例如对于非标准安装),您可能必须显式调用init,但这绝对不是推荐的方式。无论哪种情况,您都必须在计算机上安装 Z3py 前端;仅仅拥有 DLL 是不够的。查看ericpony.github.io/z3py-tutorial/guide-examples.htm的最底部
    • 受你的启发,我想我找到了一种在没有安装 z3py 的情况下运行 z3 的方法。我找到库文件,将它们复制到我的本地目录并将文件夹重命名为“z3local”,并通过import z3local.z3 as z3 导入它们。即使我卸载了 z3py,测试程序也能完美运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多