ValueError:numpy.dtype的大小错误,请尝试重新编译

时间:2013-07-17 20:30:56

标签: python numpy install pandas statsmodels

我刚刚在我的python 2.7上安装了pandas和statsmodels包 当我尝试“导入pandas as pd”时,会出现此错误消息。 有人可以帮忙吗?感谢!!!

numpy.dtype has the wrong size, try recompiling
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\analytics\ext\python27\lib\site-packages\statsmodels-0.5.0-py2.7-win32.egg\statsmodels\formula\__init__.py",
line 4, in <module>
    from formulatools import handle_formula_data
  File "C:\analytics\ext\python27\lib\site-packages\statsmodels-0.5.0-py2.7-win32.egg\statsmodels\formula\formulatools.p
y", line 1, in <module>
    import statsmodels.tools.data as data_util
  File "C:\analytics\ext\python27\lib\site-packages\statsmodels-0.5.0-py2.7-win32.egg\statsmodels\tools\__init__.py", li
ne 1, in <module>
    from tools import add_constant, categorical
  File "C:\analytics\ext\python27\lib\site-packages\statsmodels-0.5.0-py2.7-win32.egg\statsmodels\tools\tools.py", line
14, in <module>
    from pandas import DataFrame
  File "C:\analytics\ext\python27\lib\site-packages\pandas\__init__.py", line 6, in <module>
    from . import hashtable, tslib, lib
  File "numpy.pxd", line 157, in init pandas.tslib (pandas\tslib.c:49133)
ValueError: numpy.dtype has the wrong size, try recompiling

13 个答案:

答案 0 :(得分:62)

(在我的评论上稍微扩展一下)

Numpy开发人员通常遵循保持向后兼容二进制接口(ABI)的策略。但是,ABI不是向前兼容的。

这意味着什么:

在编译扩展中使用numpy的包是针对特定版本的numpy编译的。 numpy的未来版本将与包的编译扩展兼容(例外见下文)。 这些其他软件包的分发者不需要针对较新版本的numpy重新编译它们的软件包,当用户更新到较新版本的numpy时,用户不需要更新这些其他软件包。

然而,这并没有朝另一个方向发展。如果一个包是针对一个特定的numpy版本编译的,比如1.7,那么就不能保证该包的二进制文件可以用于较旧的numpy版本,比如1.6,并且经常或大部分时间它们不会。

当安装旧版本的numpy时,针对最新版本的numpy编译的pandas和statsmodel等软件包的二进制分发将不起作用。 有些软件包,例如matplotlib,如果我没记错的话,可以根据它们支持的最古老的numpy版本编译它们的扩展。在这种情况下,具有相同旧版本或任何更新版本的numpy的用户可以使用这些二进制文件。

问题中的错误消息是二进制不兼容的典型结果。

解决方案是获得二进制兼容版本,或者将numpy更新为至少编译pandas或statsmodel的版本,或者针对已经安装的旧版numpy重新编译pandas和statsmodels。

打破ABI向后兼容性:

有时numpy中的改进或重构会破坏ABI的向后兼容性。这种情况(无意中)发生在numpy 1.4.0上。 因此,将numpy更新为1.4.0的用户与所有其他已编译的包具有二进制不兼容性,这些包是针对先前版本的numpy编译的。这要求必须重新编译具有使用numpy的二进制扩展的所有包以使用ABI不兼容版本。

答案 1 :(得分:37)

对我来说(Mac OS X Mavericks,Python 2.7)

easy_install --upgrade numpy

帮助。在此之后,您可以安装最新的软件包 pandas scikit-learn ,e.t.c。使用

pip install pandas

答案 2 :(得分:30)

我发现这是一个过时或不匹配的简单版本,并修复了:

pip install --upgrade numpy
pip install --upgrade scipy
pip install --upgrade pandas

或者可以使用一个班轮:

pip install --upgrade numpy scipy pandas

答案 3 :(得分:5)

我和另一个库有类似的错误,并意识到我的系统上安装了几个版本的numpy。我的修复是编辑我的PYTHONPATH并将包含最新版numpy的网站包放在第一位。

答案 4 :(得分:2)

here一样,对我来说只有sudo pip install pandas==0.13.1工作

答案 5 :(得分:1)

使用pandas访问MYSQL时也遇到此错误。 此错误消息表示二进制兼容问题,可以通过解决 使用最新版本的pandas和numpy包。 以下是我解决此问题的步骤,它在我的Ubuntu 12.04上运行良好:

cd /tmp/
wget https://pypi.python.org/packages/source/p/pandas/pandas-0.12.0.tar.gz
tar xzvf pandas-0.12.0.tar.gz
cd pandas-0.12.0
easy_install --upgrade numpy

答案 6 :(得分:1)

在我的情况下,我安装了pandas-0.10.0.win-amd64-py2.7但是正在检查是否在更新版本的pandas中修复了一个错误。所以我做了一个easy_install -U来强制升级,但由于与numpy等有些不兼容而导致上述错误...当我做的时候

import pandas

要修复,我只是重新安装了pandas-0.10.0.win-amd64-py2.7二进制文件,一切正常。我没有看到这个答案(建议使用pip)可能对我有帮助(虽然不确定)Install particular version with easy_install

这也突出了为什么人们应该使用virtualenv(我不是)。

答案 7 :(得分:1)

对我来说(Mac OS X Mavericks)它可以安装python2.6的版本:

sudo port install py26-scikit-learn

然后运行:

python2.6 myscript.py

答案 8 :(得分:1)

我在Webfaction上解决的问题是旧的numpy库(1.5)与我的新鲜冲突

  

pip install pandas

安装在.virtualenv中。

我把pandas pipas从虚拟环境中取出后解决了这个问题。 这个想法来自对https://github.com/pydata/pandas/issues/3711的讨论,谢谢,cpcloud

答案 9 :(得分:0)

我刚刚遇到这个'ValueError'问题而已经解决了这个问题。 numpy包肯定有问题。

但是当我尝试pip install --upgrade numpy失败时,我卸载并下载最新的numpy.zip文件。 然后手动解压缩并python setup.py install

幸运的是,它有效!

答案 10 :(得分:0)

就像@ user333700所说的那样,所需的库版本可能彼此不符合。你得到一个库作为另一个库的依赖。然后,在不知道它已经作为依赖项安装的情况下,您需要该特定库并安装一个版本。有了这样的方式,依赖可能会搞砸。

我住了这样一个案子并寻找解决方案。发现这个: https://stackoverflow.com/a/12975518/1694344

我有两个不同版本的egg-info文件和文件夹名称numpy:

drwxr-xr-x. 19 root root   4096 Sep 25 15:00 numpy
drwxr-xr-x.  2 root root   4096 Sep 22 11:25 numpy-1.13.1.dist-info
-rw-r--r--.  1 root root   1630 Nov 20  2015 numpy-1.7.1-py2.7.egg-info

我将它们全部删除,并用pip重新安装numpy。

答案 11 :(得分:0)

在某些情况下,您希望保留特定的NumPy版本,此处提及的升级选项将无效。 我遇到的一个例子是预装了ArcGIS的Python发行版。要使ArcPy在ArcGIS 10.5.1中工作,该分发需要是带有NumPy 1.9.3的Python 2.7.12,而任何其他版本的NumPy可能会导致ArcPy功能出现问题。

对于这种情况,您可以尝试安装特定的旧版本的有问题的第三方库,该库应该与ArcGIS具有的旧版NumPy版本兼容。

例如,scikit-learn 0.19.1不能与NumPy 1.9.3一起使用,并且会导致您提到的相同错误。但是,scikit-learn 0.15工作正常。您可以测试不同的版本以找到有效的版本。只需通过pip提及版本号:

python -m pip install scikit-learn==0.15

答案 12 :(得分:0)

我遇到了类似的问题,只是按照先前评论中的建议使用pip install ...重新安装是行不通的。

对我有用的是使用添加的标记pip install --no-cache-dir ...重新安装,似乎缓存中某处存在不兼容的numpy版本。