ValueError: numpy.dtype ma nieprawidłowy rozmiar, spróbuj ponownie skompilować

86

Właśnie zainstalowałem pakiet pandy i statsmodels na moim Pythonie 2.7. Kiedy próbowałem „zaimportować pandy jako pd”, pojawia się ten komunikat o błędzie. Czy ktoś może pomóc? Dzięki!!!

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
źródło
1
Jak zainstalowałeś pandy?
Andy Hayden,
1
możliwy duplikat Cannot import Scikit-Learn
Bakuriu
Czy próbowałeś przekompilować?
asmeurer
Dlaczego nie skorzystać z dystrybucji python (x, y), enthought lub winpython? Zostały specjalnie zaprojektowane, aby wyeliminować te problemy z kompilacją i instalacją dla naukowych użytkowników Pythona w systemie Windows i są dostarczane z większością pakietów, które prawdopodobnie chcesz wstępnie skompilować.
DaveP,
39
Ten komunikat pojawia się, gdy panda jest kompilowana na nowszą wersję numpy niż ta, którą zainstalowałeś. Musisz albo ponownie skompilować pandy z zainstalowaną wersją numpy, albo zaktualizować numpy.
Josef,

Odpowiedzi:

65

(aby nieco rozwinąć mój komentarz)

Deweloperzy Numpy kierują się generalnie zasadą zachowania wstecznego kompatybilnego interfejsu binarnego (ABI). Jednak ABI nie jest kompatybilny w przód.

Co to znaczy:

Pakiet, który używa numpy w skompilowanym rozszerzeniu, jest kompilowany względem określonej wersji numpy. Przyszła wersja numpy będzie kompatybilna z skompilowanym rozszerzeniem pakietu (wyjątek opisano poniżej). Dystrybutorzy tych innych pakietów nie muszą rekompilować swoich pakietów z nowszymi wersjami numpy, a użytkownicy nie muszą aktualizować tych innych pakietów, gdy użytkownicy aktualizują do nowszej wersji numpy.

Jednak to nie idzie w innym kierunku. Jeśli pakiet jest kompilowany na konkretną wersję numpy, powiedzmy 1.7, to nie ma gwarancji, że pliki binarne tego pakietu będą działać ze starszymi wersjami numpy, powiedzmy 1.6, i bardzo często lub w większości przypadków nie będą.

Binarna dystrybucja pakietów, takich jak pandy i statsmodels, które są kompilowane z najnowszą wersją numpy, nie będzie działać, gdy zostanie zainstalowana starsza wersja numpy. Niektóre pakiety, na przykład matplotlib, o ile dobrze pamiętam, kompilują swoje rozszerzenia z najstarszą wersją numpy, którą obsługują. W takim przypadku użytkownicy z tą samą starą lub nowszą wersją numpy mogą korzystać z tych plików binarnych.

Komunikat o błędzie w pytaniu jest typowym wynikiem niezgodności binarnych.

Rozwiązaniem jest uzyskanie kompatybilnej wersji binarnej, albo przez aktualizację numpy do przynajmniej wersji, dla której skompilowano pandy lub modele statsmodels, albo przez przekompilowanie pand i modeli statsmodels ze starszą wersją numpy, która jest już zainstalowana.

Łamanie wstecznej kompatybilności ABI:

Czasami ulepszenia lub refaktoryzacje w Numpy Break kompatybilność wsteczna ABI. Stało się to (nieumyślnie) z numpy 1.4.0. W rezultacie użytkownicy, którzy zaktualizowali numpy do wersji 1.4.0, mieli binarne niezgodności ze wszystkimi innymi skompilowanymi pakietami, które zostały skompilowane z poprzednią wersją numpy. Wymaga to, aby wszystkie pakiety z rozszerzeniami binarnymi, które używają numpy, musiały zostać ponownie skompilowane do pracy z wersją niezgodną z ABI.

Josef
źródło
1
Próbowałem zaktualizować numpy i pandy i nadal otrzymuję ten błąd, jakieś pomysły?
NotSoShabby,
37

Dla mnie (Mac OS X Maverics, Python 2.7)

easy_install --upgrade numpy

pomógł. Następnie możesz zainstalować aktualne pakiety pandy , scikit-learn itp. Za pomocą pip :

pip install pandas
Fedor Chervinskii
źródło
3
Właśnie wykonałem "easy_install --upgrade numpy", ale nie zainstalowałem aktualnych powiązanych pakietów, takich jak pandas ik scikit-learn. Wszystko w porządku.
xjzhou
U mnie też
działało
30

Okazało się, że jest to prosta wersja, która jest nieaktualna lub niezgodna i została naprawiona za pomocą:

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

Lub może pracować z jedną wkładką:

pip install --upgrade numpy scipy pandas
RexFuzzle
źródło
Przy zmianach el capitan w OSX polecam używanie --user jako dodatkowego argumentu, aby zapobiec nadpisywaniu plików systemowych przez pip. W przeciwnym razie użytkownicy będą mieli ochotę skorzystać z sudo.
Roy Iacob
@ Roy- Zależy to od tego, czy używany jest systemowy python, czy też wersja brew afaik-sudo nie powinna być potrzebna z brew pythonem.
RexFuzzle
5

Miałem podobny błąd z inną biblioteką i zdałem sobie sprawę, że mam kilka wersji numpy zainstalowanych w moim systemie. Rozwiązaniem dla mnie była edycja mojej PYTHONPATH i umieszczenie pakietów witryn, które zawierały najnowszą wersję numpy na pierwszym miejscu.

Calimo
źródło
2

Jak tutaj , tylko dla mnie sudo pip install pandas==0.13.1zadziałało

Tal
źródło
1

Napotykam również ten błąd podczas korzystania z pand w celu uzyskania dostępu do MYSQL. Ten komunikat o błędzie wskazuje na problem ze zgodnością binarną i można go rozwiązać za pomocą najnowszej wersji pandas i pakietu numpy. Oto moje kroki, aby rozwiązać ten problem i działa dobrze na moim 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
źródło
1
Zrobiłem to i otrzymałem ten błądFile "numpy/core/setup.py", line 654, in get_mathlib_info RuntimeError: Broken toolchain: cannot link a simple C program
Mona Jalal
1

W moim przypadku zainstalowałem pandas-0.10.0.win-amd64-py2.7, ale sprawdzałem, czy błąd został naprawiony w nowszej wersji pand. Więc zrobiłem easy_install -U, aby wymusić aktualizację, ale potem otrzymałem powyższy błąd z powodu pewnych niezgodności z numpy itp ... kiedy to zrobiłem

import pandas

Aby naprawić, po prostu ponownie zainstalowałem plik binarny pandas-0.10.0.win-amd64-py2.7 i wszystko działa. Nie widziałem tej odpowiedzi (sugeruje użycie pip), która mogła mi pomóc (choć nie jestem pewien) Zainstaluj konkretną wersję za pomocą easy_install

To również podkreśla, dlaczego powinno się używać virtualenv (którego nie byłem).

Paweł
źródło
1

U mnie (Mac OS X Mavericks) udało się zainstalować wersję dla pythona2.6:

sudo port install py26-scikit-learn

następnie uruchomić:

python2.6 myscript.py
user3915137
źródło
1

Problem, który rozwiązałem w Webfaction, to stara biblioteka numpy (1.5), która była w konflikcie z moim świeżym

pip install pandas

instalacja w .virtualenv.

Problem został rozwiązany po tym, jak zainstalowałem pip pandy poza środowiskiem wirtualnym. Pomysł wziął się z dyskusji na https://github.com/pydata/pandas/issues/3711 , dzięki, cpcloud !

ph7
źródło
0

Właśnie spotkałem się z problemem „ValueError” i rozwiązałem go. Zdecydowanie coś jest nie tak z pakietem numpy.

Ale kiedy próbuję pip install --upgrade numpy nie udać, odinstalowuję i pobieram najnowszy numpy.zipplik. Następnie ręcznie rozpakuj i python setup.py installto.

Na szczęście to działa!

Yuhao
źródło
Mnie też się nie udało. Potem spróbowałem sudo pip install --upgrade numpyi zadziałało.
Harsh Wardhan
0

Jak powiedział @ user333700, wymagane wersje bibliotek mogą się nie spotkać. Otrzymujesz jedną bibliotekę jako zależność innej. Następnie, nie wiedząc, że została już zainstalowana jako zależność, potrzebujesz tej konkretnej biblioteki i instalujesz jedną wersję. W ten sposób zależności mogą zepsuć.

Przeżyłem taki przypadek i szukałem rozwiązania. Znalazłem to: https://stackoverflow.com/a/12975518/1694344

Miałem dwie różne wersje pliku egg-info i nazwę folderu 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

Usunąłem je wszystkie i ponownie zainstalowałem numpy z pip.

Sedat Kestepe
źródło
0

Miałem podobny problem i po prostu ponowna instalacja, pip install ...jak sugerowano w poprzednich komentarzach, nie działała.

To, co zadziałało, to ponowna instalacja z dodaną flagą pip install --no-cache-dir ..., wygląda na to, że gdzieś w pamięci podręcznej znajdowała się niekompatybilna wersja numpy.

Yossi Vainshtein
źródło
-1

Są przypadki, w których chcesz zachować określoną wersję NumPy, a wspomniana tutaj opcja aktualizacji nie zadziała. Przykładem, który przyszedł mi do głowy, była dystrybucja Pythona z preinstalowanym ArcGIS. Aby ArcPy działało w ArcGIS 10.5.1, ta dystrybucja musi być w Pythonie 2.7.12 z NumPy 1.9.3, a każda inna wersja NumPy prawdopodobnie spowoduje problemy z funkcjonalnością ArcPy.

W tym przypadku możesz spróbować zainstalować określoną, starszą wersję problematycznej biblioteki innej firmy, która ma być zgodna ze starszą wersją NumPy, którą ma ArcGIS.

Na przykład scikit-learn 0.19.1 NIE będzie działać z NumPy 1.9.3 i spowoduje ten sam błąd, o którym wspomniałeś. Jednak scikit-learn 0.15 działa dobrze. Możesz przetestować różne wersje, aby znaleźć tę, która działa. Wystarczy podać numer wersji przez pip:

python -m pip install scikit-learn==0.15
dbouz
źródło