这个问题很老,但是我遇到了同样的问题,并且在进入兔子洞之后……太久了……我有一个对我有用的答案。
首先,您应该使用 pip: 获取 python metis 包装器pip install metis
。
其次,您必须安装 conda-metis,您可以在此处找到。虽然 pip 调用 metis python 包装器 metis,但它只是 metis 包装器,本身没有 metis。
将文件放在 conda-metis-master 的某个文件路径中。
安装需要一些修复。确保您拥有最新版本的 Visual Studios(我使用的是 2017)。对我来说,VS 在运行 BUILD-WINDOWS.txt 中的指令时遇到了问题,这让我进入了这个线程:
为什么 MSBuild 在 C:\ 中查找 Microsoft.Cpp.Default.props 而不是 c:\Program Files (x86)\MSBuild?(错误 MSB4019)
具体来说,Windows 10 上的 Visual Studio 2017 和 2019的答案就是我所采用的。跑:
set VCTargetPaths=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets
在具有完全权限的命令提示符下设置环境变量。
还可以Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\
在 regedit4.0
中将变量MSBuildOverrideTasksPath
和ToolsVersion\4.0\
变量更改MSBuildToolPath
为C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin
.
对于 python metis,我们需要一个.dll
,而不是.lib
[1],因此我们还必须仔细查看(请参阅此处CMakeLists.txt
讨论的 Linux 版本)。我们在第 19 行添加:.set(METIS_LIBRARY_TYPE SHARED)
您应该遵循 BUILD-WINDOWS.txt 说明,但.\vsgen -G "Visual Studio 15 2017 Win64"
在命令提示符下以完全权限运行 conda-metis 文件路径,而不是使用 Visual Studio 10。
等待!在按照进一步使用 VS 构建库的说明之前,我们需要另一个修复。按照中所说的:
使用 CMake 创建 VS 项目后的 rint() 问题
我们必须path_to_your_metis_dir\GKlib\gk_arch.h
通过删除以下行来编辑文件:#define rint(x) ((idx_t)((x)+0.5))
. (或此 github 交换中列出的修复程序。)
然后去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
from metis import *
在此之后,python metis对我来说不再失败。
[1] 如果我们可以使用.lib
, 则conda install -c conda-forge metis
可以获取此文件,但设置METIS_DLL
该.lib
文件会导致 windows 错误。