Scipy错误:numpy.dtype大小发生了变化,可能表示二进制不兼容(以及相关的奇怪行为)

Ben*_*uhn 9 python macos numpy scipy scikit-learn

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

这是我为构建回购而做的事情:

mkvirtualenv thm
workon thm
pip install numpy scipy pandas ipython # and some other stuff
cd /path/to/our/repo
# run tests
Run Code Online (Sandbox Code Playgroud)

这是一个相关警告的追溯摘录(由于我们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
Run Code Online (Sandbox Code Playgroud)

我被告知这个警告是由scipy针对不同版本的numpy编译而不是安装的.但是,我把它们全部用pip安装在我认为非常标准的方式中,所以这应该不是问题,我想.

奇怪的是,尽管整个测试套件(通过python -m unittest discover)运行会产生这些错误,但运行单个测试(通过python -m unittest <module>)工作正常.

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

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
Run Code Online (Sandbox Code Playgroud)

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

ogr*_*sel 13

你是如何建造sklearn 0.14.1的?你是否用与scipy相同的numpy版本来构建它?

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

编辑:你有没有尝试过:

pip install -U scipy scikit-learn pandas
Run Code Online (Sandbox Code Playgroud)

确保您使用最新的稳定版本的whl用于这些包?

编辑:下面的评论有实际的答案,可能是为什么这个答案被接受.即:

pip uninstall -y scipy scikit-learn
pip install --no-binary scipy scikit-learn
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,` - no-use-wheel`已弃用,将来将被删除.请改用`--no-binary`. (4认同)
  • 这很奇怪,我运行完全相同的设置,我无法重现您报告的问题.numpy 1.9.0应与以前的版本兼容ABI.无论如何你可以使用:`pip uninstall -y scipy scikit-learn && pip install -no-use-wheel scipy scikit-learn`从源头重新构建scikit-learn和scipy而不是使用轮子,但它们应该可以使用numpy的新版本. (2认同)