在mpi4py中加载MPI DLL时出错

Aso*_*ile 8 python openmpi python-2.7

我正在Windows 7 64bits上将Mpi4py 1.3与python 2.7一起使用。我从此处下载了包含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
Run Code Online (Sandbox Code Playgroud)

它返回以下错误:ImportError:DLL加载失败:找不到指定的模块。我试图将bove lib文件与* / Python27 \ Lib \ site-packages \ mpi4py \ MPI.pyd一起复制,甚至复制到Windows / System32,但这没有用。感谢您对缺少DLL以及如何解决错误的帮助。

谢谢,

@ Aso.agile

小智 12

在 Windows 10 上使用带有 python 3.5 的 Mpi4py 1.3,我可以import mpi4py成功运行,但不能成功运行from mpi4py import MPI. 要修复它,只需通过MPI重新安装MPI。这对我有用。


ERI*_*RIC 8

我解决了这个问题。我的环境是 Win10、python 3.6.6、pycharm 2019.2 并链接到 annaconda visual env。
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。我阅读了大多数回复,但没有以这种方式提及。


Use*_*525 5

我有同样的问题,没有答案解决了这个问题。

对我来说,以下解决了这个问题。我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 构建工具。不知道是什么版本。就我而言,C:\Program Files (x86)\Microsoft Visual Studio 14.0\....虽然我目前使用 VS2017,但使用了 mpi4py setup.py 。
  • 安装 Windows SDK/套件和开发工具(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

我的设置:

  • 视窗 10
  • 蟒蛇 3.7


cgo*_*lke 3

在第 37 行左右使用sys.prefix\lib\site-packages\mpi4py\bin\python-mpi.exe或添加以下代码sys.prefix\lib\site-packages\mpi4py\__init__.py

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()
Run Code Online (Sandbox Code Playgroud)