ValueError: numpy.dtype hat die falsche Größe. Versuchen Sie erneut zu kompilieren

85

Ich habe gerade das Paket pandas and statsmodels auf meinem Python 2.7 installiert. Als ich versuchte, "Pandas als pd importieren", wurde diese Fehlermeldung ausgegeben. Kann jemand helfen? Vielen Dank!!!

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
Amber Chen
quelle
1
Wie haben Sie Pandas installiert?
Andy Hayden
1
Mögliches Duplikat von Scikit-Learn kann nicht importiert werden
Bakuriu
Haben Sie versucht, neu zu kompilieren?
Asmeurer
Warum nicht die Python (x, y) -, Enthought- oder Winpython-Distribution verwenden? Sie wurden speziell entwickelt, um diese Kompilierungs- und Installationsprobleme für wissenschaftliche Python-Benutzer unter Windows zu beseitigen. Sie werden mit den meisten Paketen geliefert, die Sie wahrscheinlich vorkompilieren möchten.
DaveP
38
Diese Meldung wird angezeigt, wenn pandas gegen eine neuere numpy-Version als die von Ihnen installierte kompiliert wird. Sie müssen entweder Pandas mit der von Ihnen installierten numpy-Version neu kompilieren oder numpy aktualisieren.
Josef

Antworten:

64

(um meinen Kommentar etwas zu erweitern)

Numpy Entwickler befolgen im Allgemeinen die Richtlinie, eine abwärtskompatible binäre Schnittstelle (ABI) beizubehalten. Der ABI ist jedoch nicht vorwärtskompatibel.

Was das bedeutet:

Ein Paket, das numpy in einer kompilierten Erweiterung verwendet, wird gegen eine bestimmte Version von numpy kompiliert. Zukünftige Versionen von numpy sind mit der kompilierten Erweiterung des Pakets kompatibel (Ausnahme siehe unten). Distributoren dieser anderen Pakete müssen ihr Paket nicht mit einer neueren Version von numpy neu kompilieren, und Benutzer müssen diese anderen Pakete nicht aktualisieren, wenn Benutzer auf eine neuere Version von numpy aktualisieren.

Dies geht jedoch nicht in die andere Richtung. Wenn ein Paket mit einer bestimmten Numpy-Version kompiliert wird, z. B. 1.7, gibt es keine Garantie dafür, dass die Binärdateien dieses Pakets mit älteren Numpy-Versionen, z. B. 1.6, funktionieren, und dies sehr oft oder meistens nicht.

Die binäre Verteilung von Paketen wie Pandas und Statistikmodellen, die gegen eine aktuelle Version von numpy kompiliert wurden, funktioniert nicht, wenn eine ältere Version von numpy installiert ist. Einige Pakete, zum Beispiel matplotlib, kompilieren, wenn ich mich richtig erinnere, ihre Erweiterungen mit der ältesten von ihnen unterstützten Numpy-Version. In diesem Fall können Benutzer mit derselben alten oder einer neueren Version von numpy diese Binärdateien verwenden.

Die Fehlermeldung in der Frage ist ein typisches Ergebnis von binären Inkompatibilitäten.

Die Lösung besteht darin, eine binärkompatible Version zu erhalten, indem Sie numpy entweder auf mindestens die Version aktualisieren, für die Pandas oder Statistikmodelle kompiliert wurden, oder Pandas und Statistikmodelle gegen die ältere Version von numpy neu kompilieren, die bereits installiert ist.

Unterbrechen der ABI-Abwärtskompatibilität:

Manchmal brechen Verbesserungen oder Umgestaltungen bei Numpy die Abwärtskompatibilität von ABI. Dies geschah (ungewollt) mit numpy 1.4.0. Infolgedessen hatten Benutzer, die numpy auf 1.4.0 aktualisiert hatten, binäre Inkompatibilitäten mit allen anderen kompilierten Paketen, die gegen eine frühere Version von numpy kompiliert wurden. Dies erfordert, dass alle Pakete mit binären Erweiterungen, die numpy verwenden, neu kompiliert werden müssen, um mit der ABI-inkompatiblen Version zu arbeiten.

Josef
quelle
1
Ich habe versucht, Numpy und Pandas zu aktualisieren, und ich erhalte immer noch den Fehler. Irgendwelche Ideen?
NotSoShabby
37

Für mich (Mac OS X Maverics, Python 2.7)

easy_install --upgrade numpy

geholfen. Danach können Sie aktuelle Pakete Pandas , Scikit-Learn usw. mit pip installieren :

pip install pandas
Fedor Chervinskii
quelle
3
Ich habe gerade "easy_install --upgrade numpy" ausgeführt, aber keine aktuellen Pakete wie pandas andk scikit-learn installiert. Alles ist auch in Ordnung.
Xjzhou
Arbeitete auch für mich (Ubuntu 14.04, Python 2.7)
Henry Chinner
30

Ich fand es eine einfache Version, die veraltet oder nicht übereinstimmend war und wurde behoben mit:

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

Oder könnte mit dem einen Liner arbeiten:

pip install --upgrade numpy scipy pandas
RexFuzzle
quelle
Bei Änderungen von el capitan unter OSX empfehle ich, --user als zusätzliches Argument zu verwenden, um zu verhindern, dass pip Systemdateien überschreibt. Benutzer werden sich ansonsten versucht fühlen, sudo zu verwenden.
Roy Iacob
@ Roy- Dies hängt davon ab, ob die Systempython verwendet wird oder die Brew-Version afaik-sudo mit Brew-Python nicht benötigt werden sollte.
RexFuzzle
5

Ich hatte einen ähnlichen Fehler mit einer anderen Bibliothek und stellte fest, dass auf meinem System mehrere Versionen von numpy installiert waren. Die Lösung für mich bestand darin, meinen PYTHONPATH zu bearbeiten und die Site-Pakete, die die neueste Version von numpy enthielten, an die erste Stelle zu setzen.

Calimo
quelle
2

Wie hier hat bei mir nur sudo pip install pandas==0.13.1funktioniert

Tal
quelle
1

Ich stoße auch auf diesen Fehler, wenn ich Pandas verwende, um auf MYSQL zuzugreifen. Diese Fehlermeldung weist auf ein binärkompatibles Problem hin und kann mithilfe der neuesten Version von pandas und numpy package behoben werden. Hier sind meine Schritte, um dieses Problem zu beheben, und es funktioniert gut auf meinem 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
Houcheng
quelle
1
Ich habe dies getan und diesen Fehler erhaltenFile "numpy/core/setup.py", line 654, in get_mathlib_info RuntimeError: Broken toolchain: cannot link a simple C program
Mona Jalal
1

In meinem Fall hatte ich pandas-0.10.0.win-amd64-py2.7 installiert, überprüfte jedoch, ob ein Fehler in einer neueren Version von pandas behoben wurde. Also habe ich easy_install -U durchgeführt, um das Upgrade zu erzwingen, aber dann den obigen Fehler aufgrund einiger Inkompatibilitäten mit numpy usw. erhalten, als ich dies tat

import pandas

Um das Problem zu beheben, habe ich gerade die Binärdatei pandas-0.10.0.win-amd64-py2.7 neu installiert und alles funktioniert. Ich habe diese Antwort nicht gesehen (schlägt vor, pip zu verwenden), was mir möglicherweise geholfen hat (obwohl ich nicht sicher bin ), eine bestimmte Version mit easy_install zu installieren

Dies zeigt auch, warum man virtualenv verwenden sollte (was ich nicht war).

Paul
quelle
1

Für mich (Mac OS X Mavericks) hat es funktioniert, die Version für Python2.6 zu installieren:

sudo port install py26-scikit-learn

dann renne:

python2.6 myscript.py
user3915137
quelle
1

Das Problem, das ich bei Webfaction gelöst habe, war die alte Numpy-Bibliothek (1.5), die im Widerspruch zu meiner neuen stand

Pip installieren Pandas

Installation in .virtualenv.

Das Problem wurde gelöst, nachdem ich Pandas aus der virtuellen Umgebung heraus installiert hatte. Die Idee kam aus der Diskussion auf https://github.com/pydata/pandas/issues/3711 , danke, cpcloud !

ph7
quelle
0

Ich habe gerade dieses 'ValueError'-Problem gelöst und es behoben. Auf jeden Fall stimmt etwas mit dem numpy-Paket nicht.

Aber wenn ich es versuche, ist pip install --upgrade numpyes fehlgeschlagen, also deinstalliere ich die neueste numpy.zipDatei und lade sie herunter . Dann manuell dekomprimieren und python setup.py installes.

Zum Glück funktioniert es!

Yuhao
quelle
Es ist auch für mich gescheitert. Dann habe ich es versucht sudo pip install --upgrade numpyund es hat funktioniert.
Harsh Wardhan
0

Wie @ user333700 sagte, treffen sich die erforderlichen Versionen der Bibliotheken möglicherweise nicht. Sie erhalten eine Bibliothek als Abhängigkeit einer anderen. Ohne zu wissen, dass es bereits als Abhängigkeit installiert wurde, benötigen Sie diese spezifische Bibliothek und installieren eine Version. Auf diese Weise können Abhängigkeiten durcheinander geraten.

Ich habe einen solchen Fall gelebt und nach einer Lösung gesucht. Gefunden: https://stackoverflow.com/a/12975518/1694344

Ich hatte zwei verschiedene Versionen für die Ei-Info-Datei und den Ordnernamen von 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

Ich habe sie alle entfernt und numpy mit pip neu installiert.

Sedat Kestepe
quelle
0

Ich hatte ein ähnliches Problem und installierte es einfach mit neu pip install ... wie in den vorherigen Kommentaren vorgeschlagen, funktionierte nicht.

Was für mich funktioniert hat, war die pip install --no-cache-dir ...Neuinstallation mit dem hinzugefügten Flag . Anscheinend gab es irgendwo im Cache eine inkompatible Numpy-Version.

Yossi Vainshtein
quelle
-1

Es gibt Fälle, in denen Sie eine bestimmte NumPy-Version behalten möchten und die hier erwähnte Upgrade-Option nicht funktioniert. Ein Beispiel, das mir einfiel, war die mit ArcGIS vorinstallierte Python-Distribution. Damit ArcPy in ArcGIS 10.5.1 funktioniert, muss diese Distribution Python 2.7.12 mit NumPy 1.9.3 sein, und jede andere Version von NumPy wird wahrscheinlich Probleme mit Ihrer ArcPy-Funktionalität verursachen.

In diesem Fall können Sie versuchen, eine bestimmte ältere Version der problematischen Drittanbieter-Bibliothek zu installieren, die mit der älteren NumPy-Version von ArcGIS kompatibel sein soll.

Zum Beispiel würde scikit-learn 0.19.1 NICHT mit NumPy 1.9.3 funktionieren und zu demselben Fehler führen, den Sie erwähnt haben. Scikit-learn 0.15 funktioniert jedoch einwandfrei. Sie können verschiedene Versionen testen, um die funktionierende zu finden. Erwähnen Sie einfach die Versionsnummer durch pip:

python -m pip install scikit-learn==0.15
dbouz
quelle