RuntimeError:针对 API 版本 a 编译的模块,但这个版本的 numpy 是 9

Posted

技术标签:

【中文标题】RuntimeError:针对 API 版本 a 编译的模块,但这个版本的 numpy 是 9【英文标题】:RuntimeError: module compiled against API version a but this version of numpy is 9 【发布时间】:2016-02-24 21:06:56 【问题描述】:

代码:

import numpy as np
import cv

控制台:

>>> runfile('/Users/isaiahnields/.spyder2/temp.py', wdir='/Users/isaiahnields/.spyder2')
RuntimeError: module compiled against API version a but this version of numpy is 9
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
File "/Applications/Spyder-Py2.app/Contents/Resources/lib/python2.7/spyderlib/widgets/externalshell/sitecustomize.py", line 685, in runfile
execfile(filename, namespace)
File "/Applications/Spyder-Py2.app/Contents/Resources/lib/python2.7/spyderlib/widgets/externalshell/sitecustomize.py", line 78, in execfile
builtins.execfile(filename, *where)
File "/Users/isaiahnields/.spyder2/temp.py", line 9, in <module>
import cv
File "/Applications/Spyder-Py2.app/Contents/Resources/lib/python2.7/cv.py", line 1, in <module>
from cv2.cv import *
ImportError: numpy.core.multiarray failed to import
>>> 

系统信息:OS X El Capitan、Macbook Air、1.3 GHz Intel Core i5、8 GB 1600 HMz DDR3

我已经尝试过更新 numpy.我必须将 cv.py 添加到 Spyder-Py2 中的 python2.7 文件夹中,还有什么需要添加的吗?

【问题讨论】:

【参考方案1】:

我在使用import pyopencl 时遇到了同样的问题,我不想升级 numpy,因为 tensorflow 需要旧版本的 numpy,所以我简单地解决了:

python -m pip uninstall pyopencl && python -m pip install pyopencl

这种方式 pyopencl 配置了现有的 numpy 版本并解决了错误。

【讨论】:

【参考方案2】:

虽然这个问题很老了,但我相信仍然有很多人面临着和我一样的问题。在树莓派微机上使用Python3时遇到了上述报错,运行在树莓派操作系统上。

这可能是由于安装 Numpy 模块时缺少一些库。我按照 Numpy 网站中的建议解决了这个问题。 Solutions for Numpy Module Import Error

这个 Numpy 故障排除网站信息量很大,提供了 Windows、Anaconda、Raspberry 等跨平台解决方案。也许有人可以先按照这个 Numpy 官网的建议来解决错误。

【讨论】:

【参考方案3】:

以下命令对我有用:

conda install -c anaconda numpy

【讨论】:

【参考方案4】:

这个命令解决了我的问题。

pip3 install --upgrade numpy 

【讨论】:

【参考方案5】:

要解决问题,请执行以下操作:

先卸载numpy

sudo pip uninstall numpy

使用 --no-cache-dir 选项

安装numpy
sudo pip install --no-cache-dir numpy

并指定任何特定版本,例如1.14.2

sudo pip install --no-cache-dir numpy==1.14.2

【讨论】:

无法卸载“numpy”。这是一个 distutils 安装的项目,因此我们无法准确确定哪些文件属于它,这只会导致部分卸载。【参考方案6】:

这对我有用:

我的pip 升级后无法使用,所以我需要做的第一件事就是修复它

sudo gedit /usr/bin/pip

换行

from pip import main

from pip._internal import main

那么,

 sudo pip install -U numpy

【讨论】:

【参考方案7】:

今晚我遇到了同样的问题。原来是我安装了多个 numpy 包的问题。 /usr/lib/python2.7 中安装了旧版本,/usr/local/lib/python2.7 中安装了正确版本。

另外,我有PYTHONPATH=/usr/lib/python2.7/dist-packages:/usr/local/lib/python2.7/dist-packages。 PYTHONPATH 在正确版本之前查找 numpy 的旧版本,因此在 Python 解释器中时,它会导入旧版本的 numpy。

有一个帮助是打开一个 python 会话并执行以下代码:

import numpy as np 
print np.__version__ 
print np.__path__

这应该可以准确地告诉您 Python 使用的是哪个版本,以及它的安装位置。

为了解决这个问题,我更改了PYTHONPATH=/usr/local/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages。我还使用Hitchiker's Guide to Python 设置了一个虚拟 Python 环境,特别是标题为 "Lower level: virtualenv" 的部分。我知道我应该首先设置一个虚拟环境,但我又累又懒。哦,好吧,吸取教训!

(更新)

以防万一文档再次被移动,这里是相关的位...

创建 Python 虚拟环境

通过 pip 安装 virtualenv:

$ install virtualenv

测试安装:

$ virtualenv --version

(可选)设置环境变量 VIRTUALENVWRAPPER_PYTHON 以更改虚拟环境使用的默认 python 版本,例如使用 Python 3:

$ export VIRTUALENVWRAPPER_PYTHON=$(which python3)

(可选)设置环境变量 WORKON_HOME 以更改创建 Python 虚拟环境的默认目录,例如使用 /opt/python_envs

$ export WORKON_HOME=/opt/python_envs

为项目创建虚拟环境:

$ cd my_project_folder
$ virtualenv my_virtual_env_name

激活刚刚创建的虚拟环境。假设你还设置了WORKON_HOME=/opt/python_envs:

$ source $WORKON_HOME/my_virtual_env_name/bin/activate

使用以下两种方法之一安装您的项目所需的任何 Python 包。

方法 1 - 从命令行使用 pip 安装:

$ pip install python_package_name1
$ pip install python_package_name2

方法 2 - 使用 requests.txt 文件安装:

$ echo "python_package_name1" >> requests.txt
$ echo "python_package_name2" >> requests.txt
$ pip install -r ./requests.txt

可选但强烈推荐安装virtualenvwrapper。它包含有用的命令,可以更轻松地使用虚拟 Python 环境:

$ pip install virtualenvwrapper
$ source /usr/local/bin/virtualenvwrapper.sh

在 Windows 上,安装 virtualenvwrapper 使用:

$ pip install virtualenvwrapper-win

virtualenvwrapper 的基本用法 创建一个新的虚拟环境:

$ mkvirtualenv my_virtual_env_name

列出所有虚拟环境:

$ lsvirtualenv

激活虚拟环境:

$ workon my_virtual_env_name

删除一个虚拟环境(注意!这是不可逆的!):

$ rmvirtualenv my_virtual_env_name

希望对你有所帮助!

【讨论】:

您链接到的文档出现 404 错误。你能更新链接吗? @user3243242 如您所愿! :-)【参考方案8】:

由于文档不一致,我遇到了同样的问题。 这个页面说文档中的示例最适合 python 3.x:https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_setup/py_intro/py_intro.html#intro,而这个安装页面有指向 python 2.7 和旧版本的 numpy 和 matplotlib 的链接:https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_setup/py_setup_in_windows/py_setup_in_windows.html

我的设置是这样的:我已经安装了 Python 3.6 和 3.5,但是由于 OpenCv-python 文档说它最适合 2.7.x,我也安装了那个版本。在我安装了 numpy (在 Python27 目录中,没有 pip 但使用默认提取器,因为 pip 不像 3.6 那样不是默认 python 2.7 安装的一部分),我遇到了这个RuntimeError: module compiled against API version a but this version of numpy is 错误。我尝试了许多不同版本的 numpy 和 opencv,但无济于事。最后,我只是从 python27 中删除了 numpy(只需删除站点包中的文件夹以及任何其他剩余的 numpy 命名文件),并使用 pip no 在 Python3.6 版本中安装了最新版本的 numpy、matplotlib 和 opencv问题。从那以后一直在运行 opencv。

希望这可以节省一些时间。

【讨论】:

【参考方案9】:

我遇到了与四元数模块相同的问题。使用 conda 更新模块时,numpy 版本不会更新到最后一个。如果使用 pip 命令强制更新 pip install --upgrade numpy + 通过 pip install --user numpy numpy-quaternion 安装 quaternion 模块,则问题已修复。 可能问题来自 numpy 版本。 这里是执行结果:

Python 2.7.14 |Anaconda custom (64-bit)| (default, Oct 15 2017, 03:34:40) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.

>>> import numpy as np
>>> print np.__version__
1.14.3
>>>

(base) C:\Users\jc>pip install --user numpy numpy-quaternion
Requirement already satisfied: numpy in d:\programdata\anaconda2\lib\site-packages (1.14.3)
Collecting numpy-quaternion
  Downloading https://files.pythonhosted.org/packages/3e/73/5720d1d0a95bc2d4af2f7326280172bd255db2e8e56f6fbe81933aa00006/numpy_quaternion-2018.5.10.13.50.12-cp27-cp27m-win_amd64.whl (49kB)
    100% |################################| 51kB 581kB/s
Installing collected packages: numpy-quaternion
Successfully installed numpy-quaternion-2018.5.10.13.50.12

(base) C:\Users\jc>python
Python 2.7.14 |Anaconda custom (64-bit)| (default, Oct 15 2017, 03:34:40) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.

>>> import numpy as np
>>> import quaternion
>>> 

【讨论】:

【参考方案10】:

我在尝试启动 spyder 时遇到了同样的错误。 “RuntimeError:针对 API 版本 0xb 编译的模块,但这个版本的 numpy 是 0xa”。 一旦我错误地修改了我的机器的 numpy 版本(我以为我在一个 venv 中),就会出现这个错误。如果您使用的是安装了 conda 的 spyder,我的建议是只使用 conda 来管理包。

这对我有用:

conda install anaconda

(我的机器上有 conda 但没有 anaconda) 那么:

conda update numpy

【讨论】:

【参考方案11】:

这对我有用:

sudo pip install numpy --upgrade --ignore-installed

【讨论】:

这对我也有用。我在安装旧的 numpy 版本时遇到了同样的问题,我无法移动或删除旧的 numpy 不要执行 sudo pip install !【参考方案12】:

您可能还想查看您的$PYTHONPATH。我在~/.bashrc 中更改了我的,以便让另一个包工作。

检查您的路径:

    echo $PYTHONPATH

更改您的路径(我使用 nano,但您可以通过其他方式进行编辑)

    nano ~/.bashrc

寻找带有export PYTHONPATH的行...

修改后别忘了

   source ~/.bashrc

【讨论】:

【参考方案13】:

您可能想检查您的 matplotlib 版本。

不知何故,我安装了导致问题的开发版 matplotlib。降级到稳定版本修复了它。

也可以试试python -v -c 'import YOUR_PACKAGE' 2&gt;&amp;1 | less,看看问题出在哪里,上面的错误是否能给你一些提示。

【讨论】:

【参考方案14】:

对于那些使用 anaconda Python 的人:

conda update anaconda

【讨论】:

【参考方案15】:

将 numpy 升级到最新版本

pip install numpy --upgrade

【讨论】:

这解决了问题,但是为什么呢?出现这个问题是因为安装了两个 numpy。升级如何解决这个问题?! 这不适合我:Requirement already up-to-date: numpy in /home/ubuntu/miniconda/lib/python3.6/site-packages 如果你使用默认的python导入torch可能会解决这个问题,它有一个旧版本的numpy。 当我尝试使用 import torch 导入新安装的 pytorch 时,这对我有用 卸载并重新安装python后这对我有用【参考方案16】:

检查路径

import numpy
print numpy.__path__

对我来说这是 /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy 所以我把它移到了一个临时的地方

sudo mv /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy \
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy_old

然后我下次导入 numpy 时,路径是 /Library/Python/2.7/site-packages/numpy/init.pyc,一切都很好。

【讨论】:

也为我工作。谢谢 工作,但需要使用pip install numpy -I 重新安装它(大写的 i 参数表示安装,同时忽略当前已移动的安装)。【参考方案17】:

您可能正在运行 Mac 默认 (/usr/bin/python),它在系统文件夹中安装了旧版本的 numpy。让 python 与 opencv 一起工作的最简单方法是使用 brew 将 python 和 opencv 安装到 /usr/local 并运行 /usr/local/bin/python。

brew install python
brew tap homebrew/science
brew install opencv

【讨论】:

小心!安装多个版本的 python 可能不是一个好主意。你最终可能会喜欢这个人:***.com/questions/14117945/…

以上是关于RuntimeError:针对 API 版本 a 编译的模块,但这个版本的 numpy 是 9的主要内容,如果未能解决你的问题,请参考以下文章

RuntimeError:针对 API 版本 0xc 编译的模块,但这个版本的 numpy 是 0xb

RuntimeError: module compiled against API version 0xe but this version of numpy is 0xd

Opencv / numpy问题:“针对API版本X编译的模块,但这个版本的numpy是Y”

RuntimeError: module compiled against API version 0xe but this version of numpy is 0xd

RuntimeError: module compiled against API version 0xb but this version of numpy is 0xa

解决 RuntimeError: module compiled against API version 0xf but this version of numpy is 0xd