ValueError:numpy.dtype 大小错误,请尝试重新编译
- 2025-03-20 08:47:00
- admin 原创
- 39
问题描述:
我刚刚在 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:analyticsextpython27libsite-packagesstatsmodels-0.5.0-py2.7-win32.eggstatsmodelsormula__init__.py",
line 4, in <module>
from formulatools import handle_formula_data
File "C:analyticsextpython27libsite-packagesstatsmodels-0.5.0-py2.7-win32.eggstatsmodelsormulaormulatools.p
y", line 1, in <module>
import statsmodels.tools.data as data_util
File "C:analyticsextpython27libsite-packagesstatsmodels-0.5.0-py2.7-win32.eggstatsmodels ools__init__.py", li
ne 1, in <module>
from tools import add_constant, categorical
File "C:analyticsextpython27libsite-packagesstatsmodels-0.5.0-py2.7-win32.eggstatsmodels ools ools.py", line
14, in <module>
from pandas import DataFrame
File "C:analyticsextpython27libsite-packagespandas__init__.py", line 6, in <module>
from . import hashtable, tslib, lib
File "numpy.pxd", line 157, in init pandas.tslib (pandas slib.c:49133)
ValueError: numpy.dtype has the wrong size, try recompiling
解决方案 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 不兼容的版本一起使用。
解决方案 2:
对我来说(Mac OS X Maverics,Python 2.7)
easy_install --upgrade numpy
有帮助。此后,您可以使用pip安装最新的软件包pandas、scikit-learn等:
pip install pandas
解决方案 3:
我发现这是一个简单版本,已经过时或不匹配,并且已修复:
pip install --upgrade numpy
pip install --upgrade scipy
pip install --upgrade pandas
或者可以使用以下一行代码:
pip install --upgrade numpy scipy pandas
解决方案 4:
我在另一个库上遇到了类似的错误,然后意识到我的系统上安装了多个版本的numpy。对我来说,解决方法是编辑我的PYTHONPATH,并将包含最新版本numpy的站点包放在第一位。
解决方案 5:
就像在这里一样,对我来说只sudo pip install pandas==0.13.1
有效
解决方案 6:
我在使用 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
解决方案 7:
就我而言,我安装了 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(而我没有使用)。
解决方案 8:
对于我(Mac OS X Mavericks)来说,安装 python2.6 版本是有效的:
sudo port install py26-scikit-learn
然后运行:
python2.6 myscript.py
解决方案 9:
我在 Webfaction 上解决的问题是旧的 numpy 库(1.5),它与我的新库冲突
pip install pandas
在.virtualenv 中安装。
在虚拟环境中执行 pip install pandas 后,问题得到解决。这个想法来自https://github.com/pydata/pandas/issues/3711上的讨论,谢谢cpcloud!
解决方案 10:
我刚刚遇到这个“ValueError”问题并已解决。numpy 包肯定有问题。
但是当我尝试时pip install --upgrade numpy
失败了,所以我卸载并下载了最新的numpy.zip
文件。然后手动解压python setup.py install
它。
幸运的是,它有效!
解决方案 11:
就像@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。
解决方案 12:
我遇到了类似的问题,按照之前评论中的建议重新安装pip install ...
也没有用。
对我有用的是使用添加的标志重新安装pip install --no-cache-dir ...
,似乎缓存中的某处有一个不兼容的 numpy 版本。
解决方案 13:
在某些情况下,您想要保留特定的 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
扫码咨询,免费领取项目管理大礼包!