导入numpy c扩展失败。

73

导入numpy c扩展失败

我在我的Windows系统上安装了Python 3.7以在Visual Studio Code上工作。一切都很顺利,包括使用库。 我使用控制面板中的卸载程序工具卸载了Python。然后安装了Miniconda 3。 我检查了一切工作正常,然后在终端GitBash中使用conda install numpy安装了numpy库,并在我的Windows 10上的 Visual Studio Code 上检查它,但启动失败。

重现代码示例:

import numpy as np
A = np.array([[-1], [7], [-26]])

错误信息:

Traceback (most recent call last): File "C:\Users\ramim\Miniconda3\lib\site-packages\numpy\core__init__.py", line 17, in from . import multiarray File "C:\Users\ramim\Miniconda3\lib\site-packages\numpy\core\multiarray.py", line 14, in from . import overrides File "C:\Users\ramim\Miniconda3\lib\site-packages\numpy\core\overrides.py", line 7, in from numpy.core._multiarray_umath import ( ImportError: DLL load failed: Не найден указанный модуль.

在处理以上异常时,又出现了另一个异常:

Traceback (most recent call last): File "c:/Users/ramim/Desktop/22/Matrix library/alsf.py", line 3, in import numpy as np File "C:\Users\ramim\Miniconda3\lib\site-packages\numpy__init__.py", line 142, in from . import core File "C:\Users\ramim\Miniconda3\lib\site-packages\numpy\core__init__.py", line 47, in raise ImportError(msg) ImportError:

重要提示:请阅读以下建议以解决此问题!

导入numpy的c扩展失败。 - 尝试卸载并重新安装numpy。 - 如果您已经这样做,请检查: 1.您预期使用的Python3.7来自"C:\Users\ramim\Miniconda3\python.exe",并且您的PATH或PYTHONPATH中没有任何目录, 可以干扰您尝试使用的Python和numpy版本"1.17.3"。 2.如果(1)看起来很好,请在https://github.com/numpy/numpy/issues上打开一个新问题。请包括以下细节: - 您如何安装Python - 您如何安装numpy - 您的操作系统 - 是否安装了多个版本的Python - 如果从源码构建,则为编译器版本和理想的构建日志

  • 如果您正在使用numpy git存储库,请尝试git clean -xdf(删除所有不在版本控制下的文件)并重建numpy。

注意:此错误有许多可能的原因,请不要在现有问题上发表评论,而是要新开一个问题。

原始错误是:DLL load failed: Не найден указанный модуль。

Numpy/Python 版本信息:

Python 3.7.5 Numpy 1.17.3

我试图卸载并重新安装numpy库,但无济于事。 注意:当我在终端中键入conda install numpy时,它说:

所有请求的软件包都已安装

这就是我检查numpy是否真正安装的方式!

如何解决这个问题?


3
你在执行代码之前是否激活了你安装的Conda环境? - Brett Cannon
4
我遇到了相同的问题,看起来是VS Code的问题。我可以在Anaconda Prompt中无问题地运行我的代码。conda list显示它已安装。如果我找到问题,将提交一个答案。 - bneelon
19个回答

61

1
这对我来说很好用,但由于未知原因,我不得不重复两个卸载命令,因为两个工具的两个版本都已安装。 - tfv
5
对我来说不起作用。 - Martin
参与了Homebrew M1安装的工作。 - Brainiac

24

不确定 Visual Studio 是否也有此功能,但对于 Eclipse,我必须更改其中一个环境变量。

设置:Windows、Python 3.7、带有 numpy 的 Conda venv

解决方案:

CONDA_DLL_SEARCH_MODIFICATION_ENABLE=1

对于Eclipse,可以通过属性 -> 运行/调试设置 -> 编辑 -> 环境变量来访问环境变量。

Anaconda也记录了解决方法,尽管是针对不同的问题: Conda故障排除


1
这也是conda官方网站上的官方解决方案。我认为这应该是被选中的答案。我在VS Code中遇到了这个问题,这个方法解决了这个问题。 - Cyber Knight
这让我克服了Numpy的一个巨大痛点。在我看来,这应该是被接受的答案。 - PlunkettBoy
2
这个方法解决了我的问题。对于Windows系统,在Anaconda提示符中输入 setx CONDA_DLL_SEARCH_MODIFICATION_ENABLE 1setx命令用于永久设置环境变量。如果你不想永久更改,那么使用 set CONDA_DLL_SEARCH_MODIFICATION_ENABLE=1,只在当前会话中生效。 - Rishabh Gupta
谢谢,我使用GUI将CONDA_DLL_SEARCH_MODIFICATION_ENABLE环境变量添加到Windows,并将Value设置为1,它起作用了。我认为这应该是正确的解决方案。 - Prabath
1
还修复了Intellij/PyCharm。 - Phil Cooper

22

我最近也遇到了类似的问题。我在Win 10系统上使用Miniconda安装的Python 3.8。通过将默认终端从PowerShell更改为命令提示符,我解决了这个问题。

步骤:

  1. 通过按下Ctrl+Shift+P或F1打开VS Code的命令面板菜单
  2. 选择“Terminal: Select Default Profile”选项
  3. 然后选择“命令提示符”选项
  4. 重新启动VS Code

这个对我来说完美运作了!谢谢! - bespectacled
我必须关闭所有旧的终端会话,以便使用默认设置创建一个新的终端。 - J_Scholz
这在Windows 11上,Python 3.8中的VSCode上运行。谢谢! - AKΛ

12

这个问题是由于VScode默认终端(powershell)设置引起的,

要将VScode默认终端从powershell更改为cmd,则conda环境将被正确激活,其他powershell将尝试调用conda activate xxxxxx会失败,那么随后的import numpy也会失败。

所以有两种解决方法:

  1. 修复在powershell环境下的路径搜索问题,以成功执行conda activate xxxxxx

  2. 更改vs code默认终端为'cmd':

    在settings.json中添加"terminal.integrated.shell.windows": "C:\Windows\System32\cmd.exe"


这个对我有用!不过必须更改反斜杠:"terminal.integrated.shell.windows": "C:/Windows/System32/cmd.exe" - Jossy
在命令提示符中使用 conda init 解决了我的问题。 - AliReza Sabouri

5

我通过pip重新安装NumPy解决了这个问题:

pip install --upgrade --force-reinstall numpy
                 

4
我通过以下步骤解决了这个问题:
  1. 使用conda卸载numpy和pandas
  2. 使用pip安装numpy和pandas

3
我通过删除所有的numpy版本来解决了这个问题。
pip uninstall numpy
pip3 uninstall numpy

然后通过apt-get安装numpy和libatlas-base-dev。

sudo apt-get remove python3-numpy
sudo apt-get install libatlas-base-dev

1

对于那些想知道为什么重新安装 numpy 模块会起作用的人:

如果您正在使用虚拟环境(比如相对位置为 env),请确保该文件夹不会出现在其他平台上,比如 Docker 或者您可能要切换到的不同操作系统。

请记住,numpy 所需的 Python 和 C 扩展的编译是依赖于平台的。因此,如果它在 Windows 上工作,在使用相同虚拟环境(缓存模块)的 Linux 上将无法工作。

例如,如果您在 Windows 上运行代码,然后尝试通过 Docker Desktop 在 Linux 容器上运行它,则特别重要(请确保忽略 env - 或任何您的虚拟环境名称 - 并且不将其复制到容器中)。


1
我曾经遇到过同样的问题,尝试了这里给出的几种解决方案,但都没有成功。后来在另一个论坛上找到了解决方法(https://github.com/numpy/numpy/issues/13252): conda uninstall numpy pip3 install numpy

1

这里其他答案的问题是它们希望你基本上升级某个版本的软件包(即pip install --upgrade numpy将会升级你的numpy到最新版本)... 但是如果你有一个强制要求保持当前所在版本的硬要求呢?

其中一些答案是可行的,但只有在你安装完其他依赖项后,单独安装numpy的依赖项之后。如果你试图从头开始设置(例如,在一个新的虚拟环境中使用python3 -m pip install -r requirements.txt),那么直到你运行了python3 -m pip install numpy==<你需要的旧版本numpy>之后,你将遇到这个错误。这实际上会将一些依赖项安装两次或不必要地分成两个命令,并且不是理想的解决方法。

当发生这种情况时,根本问题是pip缓存中的某个软件包引起了C编译库的错误混合... 这将在每次新安装时都会发生,直到你清除pip缓存为止...

如果你运行python3 -m pip install --no-cache-dir -r requirements.txt(其中requirements.txt中定义了numpy),并且它能正常工作,但是在移除--no-cache-dir选项后无法工作,那么缓存目录就是问题所在。
只需运行python3 -m pip cache purge来清除wheel包,然后重新运行python3 -m pip install -r requirements.txt。现在每次都能正确地安装包。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接