【问题标题】:How to install METIS package in python on windows?如何在 Windows 上的 python 中安装 METIS 包?
【发布时间】:2018-11-13 12:08:57
【问题描述】:

我目前正在使用 METIS 在 python 中运行源代码。我想使用 Jetbrains PyCharm、conda 解释器来运行它,这些都安装在 Windows 10 上。虽然我已经使用 conda 安装了 METIS,但我无法启用共享库,并且遇到了这个错误:

ModuleNotFoundError: 没有名为“metis”的模块

当我尝试在没有 conda 的情况下运行它时,尽管我已将 metis.dll 位置添加到环境变量中,但我遇到了以下错误。

RuntimeError: 无法加载 METIS dll

谁能帮帮我?

【问题讨论】:

    标签: python window shared-libraries metis


    【解决方案1】:

    这个问题很老了,但我遇到了同样的问题,在进入兔子洞之后……太久了……我有一个对我有用的答案。

    首先,您应该使用 pip:pip install metis 获取 python metis 包装器。

    其次,必须安装conda-metis,可以找到here。 pip虽然称metis python wrapper为metis,但它只是metis wrapper,本身没有metis。

    将 conda-metis-master 中的文件放在某个文件路径中。

    安装需要一些修复。确保您拥有最新版本的 Visual Studios(我使用的是 2017)。对我来说,VS 在运行 BUILD-WINDOWS.txt 中的指令时遇到了问题,这让我进入了这个线程:

    Why does MSBuild look in C:\ for Microsoft.Cpp.Default.props instead of c:\Program Files (x86)\MSBuild? ( error MSB4019)

    具体来说,对于 Windows 10 上的 Visual Studio 2017 和 2019 的答案是我所采用的。运行:

    set VCTargetPaths=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets

    在具有完全权限的命令提示符下设置环境变量。

    还可以在 regedit 中转到 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ 并将 4.0 中的变量 MSBuildOverrideTasksPathToolsVersion\4.0\ 中的变量 MSBuildToolPath 更改为 C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin

    对于python metis,我们需要.dll,而不是.lib[1],因此我们还必须仔细查看CMakeLists.txt(请参阅此讨论的Linux版本here)。我们在第 19 行添加:set(METIS_LIBRARY_TYPE SHARED)

    您应该遵循 BUILD-WINDOWS.txt 说明,但在命令提示符下的 conda-metis 文件路径中运行 .\vsgen -G "Visual Studio 15 2017 Win64" 并使用完全权限,而不是使用 Visual Studio 10。

    等等!在按照进一步使用 VS 构建库的说明之前,我们需要另一个修复。按照中所说的:

    rint() issue after creating VS Project using CMake

    我们必须通过删除以下行来编辑文件path_to_your_metis_dir\GKlib\gk_arch.h#define rint(x) ((idx_t)((x)+0.5))。 (或this github exchange 上列出的修复程序。)

    然后转到path_to_your_metis_dir\build\windows\

    在 Visual Studios 中打开 METIS.sln,转到顶部到 Build,然后从向下滚动转到 Build Solution。之后,.dll 文件将在path_to_your_metis_dir\build\windows\libmetis\Release\ 中。

    最后,我们在命令提示符下运行: set METIS_DLL=path_to_your_metis_dir\build\windows\libmetis\Release\metis.dll

    在此之后,python metis 对我来说不再在步骤from metis import * 上失败。

    [1] 如果我们可以使用.lib,那么conda install -c conda-forge metis 可以获取此文件,但是将METIS_DLL 设置为.lib 文件会导致Windows 错误。

    【讨论】:

    • 您好,非常感谢您的帮助!但是对于当前版本,通过添加行集(METIS_LIBRARY_TYPE SHARED)生成dll文件存在问题。生成它会导致 Visual Studio 出错。根据报告,似乎线路目录不正确。如果我们不添加行集(METIS_LIBRARY_TYPE SHARED),所有过程都可以正常工作。但是我们只能以这种方式生成 .lib 文件。有没有办法解决这个问题?
    • @XiaojianChen,是什么错误?我在这里所做的只是一个建议,基于该对话的 linux 版本的样子。第 14 到 18 行是检查布尔 Share 是真还是假,并决定基于此构建静态或动态库。如果有目录错误,这似乎与此选择无关,但您可以尝试告诉 VS 在构建时传递一个真实值而不是此修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    相关资源
    最近更新 更多