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


86

我刚刚在python 2.7上安装了pandas和statsmodels软件包,当我尝试“将pandas导入为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

1
您是如何安装熊猫的?
安迪·海登


您是否尝试过重新编译?
asmeurer

为什么不使用python(x,y),enthought或winpython发行版?它们是专门为消除Windows下科学python用户的这些编译和安装问题而设计的,并且随附了您可能希望预编译的大多数软件包。
DaveP

38
当使用比已安装的numpy版本新的numpy版本编译熊猫时,将显示此消息。您需要根据已安装的numpy版本重新编译熊猫,或更新numpy。
约瑟夫

Answers:


64

(以扩大我的评论)

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

那是什么意思:

使用特定版本的numpy编译在扩展名中使用numpy的软件包。numpy的未来版本将与该软件包的编译扩展兼容(有关例外情况,请参见下文)。这些其他软件包的发行者无需针对较新版本的numpy重新编译其软件包,并且当用户更新到较新版本的numpy时,用户无需更新这些其他软件包。

但是,这并没有朝相反的方向发展。如果软件包是针对特定的numpy版本(例如1.7)编译的,则不能保证该软件包的二进制文件将与较旧的numpy版本(例如1.6)一起使用,并且在很多时候或大部分时间都不会。

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

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

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

打破ABI向后兼容性:

有时,在numpy中进行的改进或重构会破坏ABI的向后兼容性。这是(无意地)在numpy 1.4.0中发生的。结果,将numpy更新为1.4.0的用户与所有其他编译软件包的二进制不兼容性,这些其他软件包都是针对numpy的早期版本进行编译的。这要求所有具有使用numpy的二进制扩展名的软件包都必须重新编译才能与ABI不兼容的版本一起使用。


1
我尝试更新numpy和pandas,但仍然出现此错误,有什么想法吗?
NotSoShabby

37

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

easy_install --upgrade numpy

帮助了。之后,您可以使用pip安装最新的软件包pandasscikit-learn等:

pip install pandas

3
我只是执行了“ easy_install --upgrade numpy”,但没有安装最新的相关软件包,例如pandas andk scikit-learn。一切都还好。
xjzhou

也为我工作(Ubuntu 14.04,Python 2.7)
Henry Chinner

30

我发现它是一个过时或不匹配的简单版本,并已通过以下方式修复:

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

或者可以使用一种衬板:

pip install --upgrade numpy scipy pandas

对于OSX上的capitan更改,我建议使用--user作为附加参数,以防止pip覆盖系统文件。否则,用户会很想使用sudo。
Roy Iacob

@ Roy-这取决于是否使用系统python或brew python是否不需要brew版本afaiksudo。
RexFuzzle '16

5

我在另一个库中遇到了类似的错误,并意识到我的系统上安装了多个版本的numpy。对我来说,解决方法是编辑我的PYTHONPATH,并将包含最新版本的numpy的站点程序包放在第一位。



1

使用熊猫访问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

1
我这样做并得到了这个错误File "numpy/core/setup.py", line 654, in get_mathlib_info RuntimeError: Broken toolchain: cannot link a simple C program
蒙娜·贾拉勒

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),可能对我有所帮助(尽管不确定),并使用easy_install安装特定版本

这也凸显了为什么应该使用virtualenv(我不是)。


1

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

sudo port install py26-scikit-learn

然后运行:

python2.6 myscript.py


0

我只是遇到了这个“ ValueError”问题并已解决。绝对numpy包有问题。

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

幸运的是,它有效!


我也失败了。然后,我尝试了,sudo pip install --upgrade numpy并且成功了。
哈什·沃丹

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。


0

我有一个类似的问题,只是使用 pip install ...按照以前的评论中的建议是行不通的。

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


-1

在某些情况下,您想保留特定的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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.