88

我刚刚在我的 python 2.7 上安装了 pandas 和 statsmodels 包当我尝试“import 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
4

13 回答 13

65

(扩大我的评论)

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

那是什么意思:

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

然而,这并没有朝着另一个方向发展。如果一个包是针对特定的 numpy 版本编译的,比如 1.7,那么不能保证该包的二进制文件可以与旧的 numpy 版本一起使用,比如 1.6,而且通常或大多数时候它们不会。

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

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

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

打破 ABI 向后兼容性:

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

于 2013-08-21T23:32:22.360 回答
37

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

easy_install --upgrade numpy

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

pip install pandas
于 2015-01-17T12:57:38.820 回答
31

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

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

或者可能与一个班轮一起工作:

pip install --upgrade numpy scipy pandas
于 2016-02-18T08:42:17.903 回答
5

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

于 2013-08-23T12:19:08.343 回答
2

就像在这里一样,对我来说只sudo pip install pandas==0.13.1工作

于 2016-02-29T08:15:49.903 回答
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(我不是)。

于 2014-02-04T15:13:15.033 回答
1

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

点安装熊猫

在 .virtualenv 中安装。

在我从虚拟环境中 pip install pandas 后,问题就解决了。这个想法来自https://github.com/pydata/pandas/issues/3711上的讨论,谢谢,cpcloud

于 2014-08-11T23:36:34.293 回答
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
于 2013-10-29T14:13:03.850 回答
1

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

sudo port install py26-scikit-learn

然后运行:

python2.6 myscript.py
于 2014-08-06T15:54:51.720 回答
0

我刚刚遇到了这个“ValueError”问题并已解决。numpy 包肯定有问题。

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

幸运的是,它有效!

于 2015-12-29T09:58:29.777 回答
0

就像@user333700 所说,所需的库版本可能无法相互满足。您将一个库作为另一个库的依赖项。然后在不知道它已作为依赖项安装的情况下,您需要该特定库并安装一个版本。通过这种方式,依赖关系可能会搞砸。

我经历过这样的情况并寻找解决方案。发现这个: https ://stackoverflow.com/a/12975518/1694344

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

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。

于 2017-09-25T15:45:05.153 回答
0

我遇到了类似的问题,并且按照之前评论中的建议简单地重新安装pip install ...并不起作用。

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

于 2018-12-31T18:42:57.603 回答
-1

在某些情况下,您希望保留特定的 NumPy 版本,而此处提到的升级选项将不起作用。我想到的一个例子是预装了 ArcGIS 的 Python 发行版。要使 ArcPy 在 ArcGIS 10.5.1 中工作,该发行版必须是 Python 2.7.12 和 NumPy 1.9.3,任何其他版本的 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
于 2018-05-24T12:53:36.103 回答