找不到 MiniZinc 驱动程序

问题描述

我正在尝试在使用 minizinc 模块的 Ubuntu 上运行 Python 脚本。

该脚本在 Windows 机器上运行良好。但是,当我尝试在 Ubuntu 上运行相同的脚本时,出现以下错误

RuntimeWarning: MiniZinc was not found on the system. No default driver Could be initialized.

minizinc 模块文档针对 Linux 系统上的此错误发出警告,并指出可以使用 minizinc.find_driver() 函数手动提供驱动程序的路径。我尝试使用该函数手动设置驱动程序路径,但发生了同样的错误(我可能设置错误)。

我是新来的,你可能会知道,我只是想知道是否有人可以启发我如何解决这个问题?

解决方法

有两种方法可以让 MiniZinc Python 知道 MiniZinc 的安装位置:

  • 您可以将 PATH 环境变量附加到安装 minizinc 可执行文件的目录中。
  • 您可以使用 find_driver 函数选择特定驱动程序,然后对返回的 make_default 对象使用 Driver 方法。

对于任一方法,您首先需要找到安装 minizinc 可执行文件的位置。如果您使用 AppImage 安装,那么您可以创建一个符号链接:

$ ln -s MiniZinc<something>.AppImage /my/path/to/minizinc

此符号链接将用作 MiniZinc 可执行文件。在以下示例中,我将使用 /my/path/to/minizinc 作为 MiniZinc 的位置,但您可以在自己的计算机上找到它。

方法一

除非您想使用 MiniZinc 的多个版本,否则通常首选使用第一种方法。如果您有要执行的 MiniZinc Python 脚本 script.py。您只需先将可执行位置添加到 PATH 环境变量,然后运行您的脚本。

$ export PATH=$PATH:/my/path/to
$ python script.py

您只需在每个终端会话中设置一次 PATH,这样之后您就可以重复运行第二行了。如果您经常使用 MiniZinc,那么这 export 行给您 .bashrc 可能是个好主意(或取决于您使用不同的文件的外壳)。

方法二

另一种方法是编辑您的 MiniZinc Python 脚本。你曾经拥有的地方

import minizinc

[SOMETHING]

你现在会写

import minizinc

my_driver = minizinc.find_driver("/my/path/to")
my_driver.make_default()

[SOMETHING]

为了确保它找到了可执行文件,您甚至可以添加 print(my_driver) 以查看它找到了哪个 MiniZinc 可执行文件。

请注意,此方法仍会向您发出警告,因为在导入时 MiniZinc Python 找不到驱动程序。它还降低了您的 Python 代码的可移植性,因为其他人可能在不同的位置安装了 MiniZinc。