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

Posted

技术标签:

【中文标题】ValueError: numpy.dtype 的大小错误,尝试重新编译【英文标题】:ValueError: numpy.dtype has the wrong size, try recompiling 【发布时间】:2013-07-16 14:06:17 【问题描述】:

我刚刚在我的 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

【问题讨论】:

你是如何安装 pandas 的? Cannot import Scikit-Learn的可能重复 你试过重新编译吗? 为什么不使用 python(x,y)、enthought 或 winpython 发行版?它们专门为在 windows 下为科学 python 用户消除这些编译和安装问题而设计,并随附您可能想要预编译的大多数包。 当 pandas 编译为比您安装的版本更新的 numpy 版本时,会显示此消息。您需要针对已安装的 numpy 版本重新编译 pandas 或更新 numpy。 【参考方案1】:

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

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 不兼容的版本一起使用。

【讨论】:

我尝试更新 numpy 和 pandas,但仍然出现此错误,有什么想法吗?【参考方案2】:

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

【讨论】:

【参考方案3】:

我在使用 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

【讨论】:

我这样做并得到了这个错误File "numpy/core/setup.py", line 654, in get_mathlib_info RuntimeError: Broken toolchain: cannot link a simple C program【参考方案4】:

就我而言,我已经安装了 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(我不是)。

【讨论】:

【参考方案5】:

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

sudo port install py26-scikit-learn

然后运行:

python2.6 myscript.py

【讨论】:

【参考方案6】:

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

pip 安装熊猫

在 .virtualenv 中安装。

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

【讨论】:

【参考方案7】:

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

easy_install --upgrade numpy

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

pip install pandas

【讨论】:

我刚刚执行了“easy_install --upgrade numpy”,但没有安装pandas和k scikit-learn等最新的相关包。一切都很好。 也为我工作(Ubuntu 14.04,Python 2.7)【参考方案8】:

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

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

幸运的是,它有效!

【讨论】:

我也失败了。然后我尝试了sudo pip install --upgrade numpy,它成功了。【参考方案9】:

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

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

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

pip install --upgrade numpy scipy pandas

【讨论】:

随着 OSX 上的 el capitan 更改,我建议使用 --user 作为附加参数来防止 pip 覆盖系统文件。否则用户会很想使用 sudo。 @Roy- 这取决于是否正在使用系统 python 或 brew 版本 afaiksudo 不应该与 brew python 一起使用。【参考方案10】:

和here一样,只有sudo pip install pandas==0.13.1对我有用

【讨论】:

【参考方案11】:

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

我遇到过这样的情况并寻找解决方案。发现这个: https://***.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。

【讨论】:

【参考方案12】:

在某些情况下,您希望保留特定的 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

【讨论】:

【参考方案13】:

我遇到了类似的问题,只是按照之前的 cmets 中的建议使用 pip install ... 重新安装不起作用。

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

【讨论】:

以上是关于ValueError: numpy.dtype 的大小错误,尝试重新编译的主要内容,如果未能解决你的问题,请参考以下文章

NumPy之:数据类型对象dtype

『Numpy』numpy.dtype内存数据解析方式指导

『Numpy』内存分析_numpy.dtype内存数据解析方式指导

如何创建包含 24 位整数的 Numpy dtype?

我可以在生成随机值时指定一个 numpy dtype 吗?

所有字符串表都会导致 PickleException:ClassDict 构造的预期零参数(用于 numpy.dtype)