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
帮助。在此之后,您可以安装最新的软件包 pandas、scikit-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』内存分析_numpy.dtype内存数据解析方式指导
所有字符串表都会导致 PickleException:ClassDict 构造的预期零参数(用于 numpy.dtype)