DLL 加载失败:执行“从 mpi4py 导入 MPI”时找不到指定的模块
Posted
技术标签:
【中文标题】DLL 加载失败:执行“从 mpi4py 导入 MPI”时找不到指定的模块【英文标题】:DLL load failed: The specified module could not be found when doing "from mpi4py import MPI" 【发布时间】:2012-12-09 21:05:39 【问题描述】:我正在尝试在 Windows 7 64 位上使用 Mpi4py 1.3 和 python 2.7。我从 here 下载了包含 OpenMPI 1.6.3 的可安装版本,因此在安装目录 (*/Python27\Lib\site-packages\mpi4py\lib) 中存在以下库:libmpi.lib、libmpi_cxx.lib、libopen-pal .lib 和 libopen-rte.lib。现在在我的代码中尝试导入它时:
from mpi4py import MPI
它返回以下错误:
ImportError: DLL load failed: 找不到指定的模块。
我试图将一个 lib 文件与 */Python27\Lib\site-packages\mpi4py\MPI.pyd 一起复制,甚至复制到 Windows/System32,但它没有用。感谢您就缺少哪些 DLL 以及如何修复错误提供帮助?
【问题讨论】:
*.lib 是静态库存档或导入库。这些绝对是不是 DLL。 感谢@HristoIliev 的评论。你说得对*.lib 是静态库,在这种情况下,OpenMPI 是以形式提供的。那么缺少什么DLL呢? 抱歉,没用过 mpi4py,以免在 Windows 上使用。检查安装目录。可能是位数不匹配(最近在 Open MPI 邮件列表中讨论了一些 Windows 安装问题...) 【参考方案1】:在 Windows 10 上使用 Mpi4py 1.3 和 python 3.5,我可以成功运行 import mpi4py
,但不能成功运行 from mpi4py import MPI
。要修复它,只需通过MPI 重新安装 MPI。这对我有用。
【讨论】:
【参考方案2】:我解决了这个问题。我的环境是 Win10、python 3.6.6、pycharm 2019.2 并链接到 anaconda 视觉环境。 1.下载MS MPI,同时安装.mis和SDK。 2.设置环境变量 控制面板-->高级系统设置-->环境变量-->添加 (1) C:\Program Files (x86)\Microsoft SDKs\MPI 和 (2) C:\Program Files\Microsoft MPI\Bin。 有我的路径,你可能需要在这里更改路径。 3.安装MS Visual Studio,社区版就够了 4. Anaconda 提示,使用conda install -c intel mpi4py。我阅读了大多数回复,但没有这样提及。
【讨论】:
【参考方案3】:我有同样的问题,没有答案解决了这个问题。
对我来说,以下解决了这个问题。我手动编译安装mpi4py
如下:
C:\Program Files (x86)\Microsoft SDKs\MPI\Lib
和C:\Program Files (x86)\Microsoft SDKs\MPI
添加到您的Windows 环境变量中(不确定是否需要)
您需要带有 MSVC 140 或纯 Visual Studio 的 Visual Studio 构建工具。不确定是什么版本。就我而言,mpi4py setup.py 使用了C:\Program Files (x86)\Microsoft Visual Studio 14.0\....
,尽管我目前使用的是 VS2017。
安装 Windows SDK/Kits 和开发工具 (https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk)
打开开发者命令提示符(它就像一个带有一些额外功能的 CMD)
如果您使用 Virtualenv,请执行 (venv/Scripts/activate) 来激活您的 venv
创建并更改为临时目录并执行以下操作:
git clone https://github.com/mpi4py/mpi4py.git
cd mpi4py
python -m pip install Cython
python setup.py build
python setup.py install
我的设置:
Windows 10 Python 3.7【讨论】:
更新了下载 MPI 二进制文件和 MPI SDK 的链接,都必须作为先决条件安装:microsoft.com/en-us/download/details.aspx?id=100305【参考方案4】:使用sys.prefix\lib\site-packages\mpi4py\bin\python-mpi.exe
或将以下代码添加到sys.prefix\lib\site-packages\mpi4py\__init__.py
第37 行附近:
def _init_openmpi():
"""Pre-load libmpi.dll and register OpenMPI distribution."""
import os
import ctypes
if os.name != 'nt' or 'OPENMPI_HOME' in os.environ:
return
try:
openmpi_home = os.path.abspath(os.path.dirname(__file__))
openmpi_bin = os.path.join(openmpi_home, 'bin')
os.environ['OPENMPI_HOME'] = openmpi_home
os.environ['PATH'] = ';'.join((openmpi_bin, os.environ['PATH']))
ctypes.cdll.LoadLibrary(os.path.join(openmpi_bin, 'libmpi.dll'))
except Exception:
pass
_init_openmpi()
【讨论】:
我试过这个,我在def get_include():
函数之前和之后都添加了代码,但它不起作用。我不太明白你提出的第一个解决方案。
这个答案已经过时了。它适用于链接到 OpenMPI 的 5 年前的 mpi4py 二进制文件。
有道理,但是您现在知道如何解决了吗?
我没有 Windows 可以尝试,但也许尝试“conda install mpi4py”可能会解决您的问题。 linux 的类似解决方法:***.com/a/38332136/1716869【参考方案5】:
我尝试了以下方法,它奏效了。
-
卸载 OpenMPI
正在卸载
mpi4py
安装 Microsoft MPI
用pip
重新安装mpi4py
以便安装***
来源:https://groups.google.com/d/msg/mpi4py/VA7Aihi64R0/jnxAT2HtCgAJ
【讨论】:
【参考方案6】:我通过从https://github.com/Microsoft/Microsoft-MPI 安装最新版本的 MSMPI 修复了该错误
【讨论】:
【参考方案7】:对于任何收到此错误“从 mpi4py 导入 MPI ImportError:DLL 加载失败:找不到指定的过程。” 我通过将 MSMPI 降级到 V10.0 来解决它,它不适用于 V10.2。 并使用 MPISdk V8.0 您必须卸载您现在拥有的 MSMPI 并从此链接安装 V10.0 MSMPIV10.0 不接受在不卸载旧版本的情况下安装新版本, 希望它会工作
【讨论】:
以上是关于DLL 加载失败:执行“从 mpi4py 导入 MPI”时找不到指定的模块的主要内容,如果未能解决你的问题,请参考以下文章