【问题标题】:DLL load failed: The specified module could not be found when doing "from mpi4py import MPI"DLL 加载失败:执行“从 mpi4py 导入 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 安装问题...)

标签: python python-2.7 openmpi


【解决方案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

      【讨论】:

      【解决方案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 的类似解决方法:stackoverflow.com/a/38332136/1716869
      【解决方案5】:

      我尝试了以下方法,它奏效了。

      1. 卸载 OpenMPI
      2. 正在卸载mpi4py
      3. 安装 Microsoft MPI
      4. 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 不接受在不卸载旧版本的情况下安装新版本, 希望它会工作

          【讨论】:

            猜你喜欢
            • 2023-03-05
            • 1970-01-01
            • 2022-06-21
            • 2020-05-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-10-22
            • 2022-12-10
            相关资源
            最近更新 更多