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

2024-04-24 09:17:11 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: inimportpandaslibpackageslinesitetools
3条回答

(对我的评论作一点扩展)

Numpy开发人员通常遵循一种策略,即保持向后兼容的二进制接口(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不兼容的版本。

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

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

或者可以使用一个行:

pip install --upgrade numpy scipy pandas

对我来说(MacOSXMaverics,Python2.7)

easy_install --upgrade numpy

有帮助。在此之后,您可以使用pip安装最新的软件包pandasscikit learn,e.t.c.:

pip install pandas

相关问题 更多 >