2014-09-09 10 views
5

Sto installando numpy/scipy/scikit-learn su OS X 10.9.4 e ricevo errori relativi a "numpy.dtype size changed , può indicare incompatibilità binaria ".Errore scipy: la dimensione numpy.dtype è stata modificata, potrebbe indicare l'incompatibilità binaria (e un comportamento strano associato)

Ecco quello che ho fatto per costruire il repo:

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

Ecco un estratto traceback di un avvertimento rilevante (trasformato in un errore perché usiamo warnings.simplefilter('error') all'inizio del nostro test):

====================================================================== 
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 

Mi viene detto che questo avviso è causato da scipy che viene compilato su una versione diversa di numpy rispetto a quella installata. Tuttavia, li ho installati tutti con pip in quello che pensavo fosse un modo abbastanza standard, quindi questo non dovrebbe essere un problema, penserei.

Stranamente, sebbene l'esecuzione dell'intera suite di test nel suo insieme (tramite python -m unittest discover) restituisca questi errori, l'esecuzione dei singoli test (tramite python -m unittest <module>) funziona correttamente.

Secondo i test, ecco alcune rilevanti informazioni sulla versione:

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 

Felice di fornire più informazioni su richiesta!

risposta

8

Come hai creato sklearn 0.14.1? Lo hai costruito contro la stessa versione di Numpy come hai fatto per Scipy?

Le versioni recenti di scikit-learn, scipy e numpy hanno pacchetti precompilati. In particolare, scikit-learn 0.15.2 dovrebbe essere compatibile binario con numpy 1.7+. Penso che lo stesso sia vero con scipy 0.14.0 ma hai detto di averlo creato da te, che non è quello che pip dovrebbe fare di default (dovrebbe solo installare il pacchetto whl precompilato).

Edit: hai provato a fare:

pip install -U scipy scikit-learn pandas 

per assicurarsi che si sta utilizzando le ultime versioni stabili del WHL per questi pacchetti?

Modifica: Il commento qui sotto ha la risposta effettiva che funziona ed è presumibilmente il motivo per cui questa risposta è stata accettata. Vale a dire:

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

Grazie! Scusa - quella versione di sklearn era di una versione precedente del post in cui stavo usando la nostra versione personalizzata di scikit-learn. Poi sono passato a stock sklearn e ho aggiornato il post (visto che stavo ancora vedendo il problema), ma ho dimenticato di aggiornare quella riga. Ho modificato il post in modo che corrisponda. I miei scipy, scikit-learn e panda ora sono tutti all'ultima versione e il comando che hai suggerito non fa nulla. –

+0

Inoltre, non ho creato scipy dalla fonte. In realtà, forse questo è il problema? Hai citato pacchetti precompilati - c'è un modo per dire a Pip * non * di usare pacchetti precostruiti e di costruire io stesso le cose? Dall'output, sembra che Pip abbia compilato numpy, ma non scipy. –

+2

Questo è strano, sto eseguendo esattamente la stessa configurazione e non riesco a riprodurre il problema segnalato. numpy 1.9.0 dovrebbe essere compatibile ABI con le versioni precedenti. Ad ogni modo si può usare: 'pip disinstallare -y scipy scikit-learn && pip installare -no-use-wheel scipy scikit-learn' per ricostruire scikit-learn e scipy dalla sorgente invece di usare le ruote, ma dovrebbero funziona con la nuova versione di numpy. – ogrisel

Problemi correlati