【问题标题】:RuntimeError: module compiled against API version a but this version of numpy is 9RuntimeError:针对 API 版本 a 编译的模块,但这个版本的 numpy 是 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 文件夹中,还有什么需要添加的吗?

【问题讨论】:

    标签: python python-2.7 opencv numpy


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

                          【讨论】:

                          猜你喜欢
                          • 2023-03-20
                          • 2021-06-29
                          • 2018-06-11
                          • 2016-09-27
                          • 2018-10-13
                          • 2018-09-20
                          • 2014-01-26
                          • 1970-01-01
                          相关资源
                          最近更新 更多