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如下:

从https://duongtrungnghia.wordpress.com/2017/03/28/install-mpi4py-on-windows-10/ 安装适用于 Windows 的 MPI SDK 10 将C:\Program Files (x86)\Microsoft SDKs\MPI\LibC:\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”时找不到指定的模块的主要内容,如果未能解决你的问题,请参考以下文章

CX_freeze 可执行文件将不起作用。 _tkinter DLL 加载失败

python + opencv“dll加载失败”

Python 中的 C++ 扩展“DLL 加载失败”

DLL 加载失败,在 Python 上使用 Kivy 时

无法导入numpy,DLL加载失败:找不到指定的模块

Pyinstaller ImportError:导入 win32gui 时 DLL 加载失败