【问题标题】:Scipy error: numpy.dtype size changed, may indicate binary incompatibility (and associated strange behavior)Scipy 错误:numpy.dtype 大小已更改,可能表示二进制不兼容(以及相关的奇怪行为)
【发布时间】:2014-11-03 08:04:32
【问题描述】:

我正在 OS X 10.9.4 上安装 numpy/scipy/scikit-learn,并且收到有关“numpy.dtype 大小已更改,可能表示二进制不兼容”的错误。

这是我为构建 repo 所做的:

mkvirtualenv thm
workon thm
pip install numpy scipy pandas ipython # and some other stuff
cd /path/to/our/repo
# run tests

这是一个相关警告的回溯摘录(变成了一个错误,因为我们在测试开始时使用了warnings.simplefilter('error')):

======================================================================
ERROR: Failure: RuntimeWarning (numpy.dtype size changed, may indicate binary in
compatibility)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/ben/.virtualenvs/thm/lib/python2.7/site-packages/nose/loader.py",
 line 414, in loadTestsFromName
    addr.filename, addr.module)
  File "/Users/ben/.virtualenvs/thm/lib/python2.7/site-packages/nose/importer.py
", line 47, in importFromPath
    return self.importFromDir(dir_path, fqname)
  File "/Users/ben/.virtualenvs/thm/lib/python2.7/site-packages/nose/importer.py
", line 94, in importFromDir
    mod = load_module(part_fqname, fh, filename, desc)
  File "/Users/ben/code/thm/alpha/prosper/base/stats/test_auc.py", line 3, in <m
odule>
    import sklearn.metrics
  File "/Users/ben/.virtualenvs/thm/lib/python2.7/site-packages/sklearn/metrics/
__init__.py", line 6, in <module>
    from .metrics import (accuracy_score,
  File "/Users/ben/.virtualenvs/thm/lib/python2.7/site-packages/sklearn/metrics/metrics.py", line 27, in <module>
    from scipy.spatial.distance import hamming as sp_hamming
  File "/Users/ben/.virtualenvs/thm/lib/python2.7/site-packages/scipy/spatial/__init__.py", line 90, in <module>
    from .ckdtree import *
  File "__init__.pxd", line 155, in init scipy.spatial.ckdtree (scipy/spatial/ckdtree.c:20570)
RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility

有人告诉我,这个警告是由于 scipy 编译时使用的 numpy 版本与安装的版本不同。但是,我以我认为非常标准的方式使用 pip 安装了它们,所以我认为这应该不是问题。

奇怪的是,虽然作为一个整体运行我们的整个测试套件(通过python -m unittest discover)会出现这些错误,但运行单个测试(通过python -m unittest &lt;module&gt;)可以正常工作。

根据测试,这里有一些相关的版本信息:

numpy version 1.9.0 (rev 07601a64cdfeb1c0247bde1294ad6380413cab66)
scipy version 0.14.0 (built against numpy 1.9.0)
sklearn version 0.15.2
pandas version 0.14.1

很高兴根据要求提供更多信息!

【问题讨论】:

    标签: python macos numpy scipy scikit-learn


    【解决方案1】:

    您是如何构建 sklearn 0.14.1 的?您是否针对与 scipy 相同版本的 numpy 构建它?

    最近版本的 scikit-learn、scipy 和 numpy 都有预建包。特别是 scikit-learn 0.15.2 应该与 numpy 1.7+ 二进制兼容。我认为 scipy 0.14.0 也是如此,但你说你是从源代码自己构建的,这不是 pip 默认应该做的(它应该只安装预构建的 whl 包)。

    编辑:你有没有尝试过:

    pip install -U scipy scikit-learn pandas
    

    确保您为这些软件包使用最新的稳定版 whl?

    编辑:下面的评论有有效的实际答案,大概是这个答案被接受的原因。即:

    pip uninstall -y scipy scikit-learn
    pip install --no-binary scipy scikit-learn
    

    【讨论】:

    • 谢谢!抱歉——该版本的 sklearn 来自我使用我们定制版本的 scikit-learn 的帖子的先前版本。然后我切换到股票 sklearn 并更新了帖子(因为我仍然看到问题),但忘记更新该行。我已经编辑了帖子以匹配。我的 scipy、scikit-learn 和 pandas 现在都是最新版本,你建议的命令什么也没做。
    • 这很奇怪,我运行的设置完全相同,我无法重现您报告的问题。 numpy 1.9.0 应该与以前版本的 ABI 兼容。无论如何,您可以使用:pip uninstall -y scipy scikit-learn &amp;&amp; pip install –no-use-wheel scipy scikit-learn 从源代码重新构建 scikit-learn 和 scipy,而不是使用轮子,但它们应该适用于新版本的 numpy。
    • 我刚刚针对numpy==1.9.0 构建了scipy==0.14.0,同时仍在为scikit-learn==0.15.2 使用whl 包,我可以在没有任何警告的情况下运行python -c "from sklearn.metrics import *"
    • “我的系统 numpy 是 v1.6.2,所以它可能链接到了不应该链接的地方?”:这很奇怪,scipy 和 scikit-learn 应该针对安装在活动 python 中的 numpy 构建site-packages,不是来自其他 python 解释器的任何系统库。
    • 仅供参考,--no-use-wheel 已弃用,将来将被删除。请改用--no-binary
    猜你喜欢
    • 2018-12-31
    • 2021-05-04
    • 1970-01-01
    • 2021-12-12
    • 2021-05-22
    • 2021-05-17
    • 2021-07-06
    • 2021-06-14
    相关资源
    最近更新 更多