ValueError: numpy.dtype ha la dimensione sbagliata, prova a ricompilarlo


86

Ho appena installato i pacchetti panda e statsmodels sul mio python 2.7. Quando ho provato a "importare panda come pd", viene visualizzato questo messaggio di errore. Qualcuno può aiutare? Grazie!!!

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

1
Come hai installato i panda?
Andy Hayden

1
possibile duplicato di Impossibile importare Scikit-Learn
Bakuriu

Hai provato a ricompilare?
asmeurer

Perché non utilizzare la distribuzione python (x, y), enthought o winpython? Sono progettati specificamente per eliminare questi problemi di compilazione e installazione per gli utenti di Python scientifico sotto Windows e vengono forniti con la maggior parte dei pacchetti che è probabile che si desideri precompilati.
DaveP

38
Questo messaggio viene visualizzato quando i panda vengono compilati con una versione numpy più recente di quella che hai installato. Devi ricompilare i panda con la versione numpy che hai installato o aggiornare numpy.
Josef

Risposte:


64

(per espandere un po 'il mio commento)

Gli sviluppatori Numpy seguono in generale una politica di mantenere un'interfaccia binaria compatibile con le versioni precedenti (ABI). Tuttavia, l'ABI non è compatibile con le versioni successive.

Cosa significa:

Un pacchetto, che utilizza numpy in un'estensione compilata, viene compilato con una versione specifica di numpy. La versione futura di numpy sarà compatibile con l'estensione compilata del pacchetto (per l'eccezione vedi sotto). I distributori di questi altri pacchetti non hanno bisogno di ricompilare il loro pacchetto con una versione più recente di numpy e gli utenti non hanno bisogno di aggiornare questi altri pacchetti, quando gli utenti aggiornano a una versione più recente di numpy.

Tuttavia, questo non va nella direzione opposta. Se un pacchetto viene compilato con una specifica versione di numpy, diciamo 1.7, allora non vi è alcuna garanzia che i binari di quel pacchetto funzioneranno con le versioni precedenti di numpy, diciamo 1.6, e molto spesso o la maggior parte delle volte non lo faranno.

La distribuzione binaria di pacchetti come pandas e statsmodels, compilati con una versione recente di numpy, non funzionerà quando è installata una versione precedente di numpy. Alcuni pacchetti, ad esempio matplotlib, se ricordo bene, compilano le loro estensioni contro la versione numpy più vecchia che supportano. In questo caso, gli utenti con la stessa versione vecchia o più recente di numpy possono utilizzare quei binari.

Il messaggio di errore nella domanda è un tipico risultato di incompatibilità binarie.

La soluzione è ottenere una versione compatibile con i binari, aggiornando numpy almeno alla versione su cui sono stati compilati panda o statsmodels, oppure ricompilare panda e statsmodels con la versione precedente di numpy già installata.

Rompere la compatibilità con le versioni precedenti dell'ABI:

A volte miglioramenti o refactoring in numpy interrompono la compatibilità con le versioni precedenti dell'ABI. Questo è successo (involontariamente) con numpy 1.4.0. Di conseguenza, gli utenti che hanno aggiornato numpy alla 1.4.0 hanno incompatibilità binarie con tutti gli altri pacchetti compilati, che sono stati compilati con una versione precedente di numpy. Ciò richiede che tutti i pacchetti con estensioni binarie che utilizzano numpy debbano essere ricompilati per funzionare con la versione incompatibile ABI.


1
Ho provato ad aggiornare numpy e panda e ricevo ancora questo errore, qualche idea?
NotSoShabby

37

Per me (Mac OS X Maverics, Python 2.7)

easy_install --upgrade numpy

aiutato. Dopodiché puoi installare i pacchetti aggiornati panda , scikit-learn , ecc. Usando pip :

pip install pandas

3
Ho appena eseguito "easy_install --upgrade numpy", ma non ho installato pacchetti correlati aggiornati come pandas ek scikit-learn. Va tutto bene anche.
xjzhou

Ha funzionato anche per me (Ubuntu 14.04, Python 2.7)
Henry Chinner

30

Ho trovato che fosse una versione semplice obsoleta o non corrispondente ed è stata risolta con:

pip install --upgrade numpy
pip install --upgrade scipy
pip install --upgrade pandas

O potrebbe funzionare con un liner:

pip install --upgrade numpy scipy pandas

Con le modifiche di el capitan su OSX, consiglio di usare --user come argomento aggiuntivo per impedire a pip di sovrascrivere i file di sistema. Gli utenti si sentiranno altrimenti tentati di usare sudo.
Roy Iacob

@ Roy- Questo dipende se il sistema python è in uso o se la versione brew afaik- sudo non dovrebbe essere necessaria con brew python.
RexFuzzle

5

Ho avuto un errore simile con un'altra libreria e mi sono reso conto che avevo diverse versioni di numpy installate sul mio sistema. La soluzione per me era modificare il mio PYTHONPATH e mettere i pacchetti del sito che contenevano l'ultima versione di numpy in prima posizione.


2

Come qui , per me ha sudo pip install pandas==0.13.1funzionato solo


1

Ho riscontrato questo errore anche quando uso i panda per accedere a MYSQL. Questo messaggio di errore indica un problema di compatibilità binaria e può essere risolto utilizzando l'ultima versione di panda e il pacchetto numpy. Ecco i miei passaggi per risolvere questo problema e funziona bene sul mio 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

1
L'ho fatto e ho ricevuto questo erroreFile "numpy/core/setup.py", line 654, in get_mathlib_info RuntimeError: Broken toolchain: cannot link a simple C program
Mona Jalal

1

Nel mio caso, avevo installato pandas-0.10.0.win-amd64-py2.7 ma stavo controllando se un bug fosse stato corretto in una versione più recente di panda. Quindi ho eseguito un easy_install -U per forzare l'aggiornamento, ma poi ho ricevuto l'errore sopra a causa di alcune incompatibilità con numpy ecc ... quando l'ho fatto

import pandas

Per risolvere il problema, ho appena reinstallato il binario pandas-0.10.0.win-amd64-py2.7 e tutto funziona. Non ho visto questa risposta (suggerisce di usare pip) che potrebbe avermi aiutato (anche se non sono sicuro) Installare una versione particolare con easy_install

Anche questo evidenzia perché si dovrebbe usare virtualenv (che non ero).


1

Per me (Mac OS X Mavericks) ha funzionato per installare la versione per python2.6:

sudo port install py26-scikit-learn

quindi esegui:

python2.6 myscript.py

1

Il problema che ho risolto su Webfaction era la vecchia libreria numpy (1.5) che era in conflitto con la mia nuova

pip installa i panda

installazione in .virtualenv.

Il problema è stato risolto dopo aver fatto installare pip panda dall'ambiente virtuale. L'idea è nata dalla discussione su https://github.com/pydata/pandas/issues/3711 , grazie, cpcloud !


0

Ho appena incontrato questo problema di "ValueError" e l'ho risolto. Sicuramente c'è qualcosa che non va con il pacchetto numpy.

Ma quando provo a pip install --upgrade numpynon farlo, disinstallo e scarico il numpy.zipfile più recente . Quindi decomprimere manualmente e python setup.py installil file.

Per fortuna funziona!


È fallito anche per me. Poi ho provato sudo pip install --upgrade numpye ha funzionato.
Harsh Wardhan

0

Come ha detto @ user333700, le versioni richieste delle librerie potrebbero non essere compatibili l'una con l'altra. Ottieni una libreria come dipendenza di un'altra. Quindi senza sapere che era già installato come dipendenza, hai bisogno di quella libreria specifica e installi una versione. Con questi modi le dipendenze possono rovinarsi.

Ho vissuto un caso del genere e ho cercato una soluzione. Trovato questo: https://stackoverflow.com/a/12975518/1694344

Avevo due versioni diverse per il file di informazioni sulle uova e il nome della cartella di 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

Li ho rimossi tutti e ho reinstallato numpy con pip.


0

Ho avuto un problema simile e la semplice reinstallazione utilizzando pip install ...come suggerito nei commenti precedenti non ha funzionato.

Quello che ha funzionato per me è stata la reinstallazione con il flag aggiunto pip install --no-cache-dir ..., sembra che da qualche parte nella cache ci fosse una versione numpy incompatibile.


-1

Ci sono casi in cui desideri mantenere una versione specifica di NumPy e l'opzione di aggiornamento qui menzionata non funzionerà. Un esempio che mi è venuto in mente è stata la distribuzione Python preinstallata con ArcGIS. Affinché ArcPy funzioni in ArcGIS 10.5.1, quella distribuzione deve essere Python 2.7.12 con NumPy 1.9.3 e qualsiasi altra versione di NumPy probabilmente causerà problemi con la funzionalità ArcPy.

Quello che puoi fare con questo caso è provare a installare una versione specifica e precedente della libreria problematica di terze parti che dovrebbe essere compatibile con la versione precedente di NumPy di ​​ArcGIS.

Ad esempio, scikit-learn 0.19.1 NON funzionerebbe con NumPy 1.9.3 e provocherebbe lo stesso errore che hai menzionato. Tuttavia, scikit-learn 0.15 funziona bene. Puoi provare diverse versioni per trovare quella che funziona. Basta menzionare il numero di versione tramite pip:

python -m pip install scikit-learn==0.15
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.