web-dev-qa-db-fra.com

ValueError: numpy.dtype a une taille incorrecte, essayez de recompiler

Je viens d'installer pandas et le paquet statsmodels sur mon python 2.7) lorsque j'ai essayé "import pandas as pd", cette erreur le message arrive, quelqu'un peut-il nous aider? Merci !!!

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
85
Amber Chen

(pour élargir un peu mon commentaire)

Les développeurs de Numpy suivent généralement une politique consistant à conserver une interface binaire compatible avec les versions antérieures (ABI). Cependant, l’ABI n’est pas compatible en aval.

Qu'est-ce que cela signifie:

Un paquet, qui utilise numpy dans une extension compilée, est compilé avec une version spécifique de numpy. La version future de numpy sera compatible avec l'extension compilée du paquet (voir les exceptions ci-dessous). Les distributeurs de ces autres packages n'ont pas besoin de recompiler leur package avec une version plus récente de numpy et les utilisateurs n'ont pas besoin de mettre à jour ces autres packages lorsqu'ils mettent à jour une version plus récente de numpy.

Cependant, cela ne va pas dans l'autre sens. Si un paquet est compilé avec une version spécifique de numpy, disons 1.7, rien ne garantit que les fichiers binaires de ce paquet fonctionneront avec les versions plus anciennes de numpy, disons 1.6, et très souvent ou la plupart du temps, ils ne le feront pas.

La distribution binaire de paquets tels que pandas et statsmodels, compilés avec une version récente de numpy, ne fonctionnera pas si une version plus ancienne de numpy est installée. Certains paquets, par exemple matplotlib, si je souvenez-vous correctement, compilez leurs extensions avec la version la plus ancienne de numpy prise en charge, auquel cas les utilisateurs disposant de la même version ancienne ou plus récente de numpy peuvent utiliser ces fichiers binaires.

Le message d'erreur dans la question est un résultat typique d'incompatibilités binaires.

La solution est d’obtenir une version compatible binaire, soit en mettant à jour numpy avec au moins la version contre laquelle pandas ou statsmodels ont été compilés, ou bien de recompiler pandas et statsmodels par rapport à l’ancienne version de numpy déjà installée.

Briser la compatibilité descendante ABI:

Parfois, les améliorations ou les modifications apportées à numpy annulent la compatibilité descendante d’ABI. Ceci est arrivé (involontairement) avec numpy 1.4.0. En conséquence, les utilisateurs qui mettaient à jour numpy à la version 1.4.0 présentaient des incompatibilités binaires avec tous les autres packages compilés, compilés avec une version précédente de numpy. Cela nécessite que tous les packages avec des extensions binaires qui utilisent numpy soient recompilés pour fonctionner avec la version incompatible ABI.

62
Josef

Pour moi (Maverics de Mac OS X, Python 2.7)

easy_install --upgrade numpy

aidé. Après cela, vous pourrez installer des paquets à jour , des pandas , scikit-learn , etc en utilisant pip:

pip install pandas
37
Fedor Chervinskii

J'ai trouvé qu'il s'agissait d'une version simple obsolète ou incompatible et j'ai été corrigé avec:

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

Ou pourrait travailler avec le one-liner:

pip install --upgrade numpy scipy pandas
30
RexFuzzle

J'ai eu une erreur similaire avec une autre bibliothèque et j'ai réalisé que plusieurs versions de numpy étaient installées sur mon système. Le correctif pour moi était d’éditer mon PYTHONPATH et de placer les paquets-sites contenant la dernière version de numpy en première position.

5
Calimo

Comme dans ici , pour moi seulement Sudo pip install pandas==0.13.1 travaillé

2
Tal

Pour moi (Mac OS X Mavericks), l’installation de la version pour python2.6 a fonctionné:

Sudo port install py26-scikit-learn

puis lancez:

python2.6 myscript.py
1
user3915137

Je rencontre également cette erreur lorsque vous utilisez pandas pour accéder à MYSQL. Ce message d'erreur indique un problème de compatibilité binaire et peut être résolu en utilisant la dernière version de pandas et numpy Voici les étapes à suivre pour résoudre ce problème, et cela fonctionne bien sous 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
Houcheng

Le problème que j'ai résolu sur Webfaction était l'ancienne bibliothèque numpy (1.5) qui était en conflit avec ma nouvelle

pip installer des pandas

installation dans .virtualenv.

Le problème a été résolu après que j'ai installé pip pandas hors de l'environnement virtuel. L'idée est née d'une discussion sur https://github.com/pydata/pandas/issues/3711 , merci, cpcloud !

1
ph7

Dans mon cas, j'avais installé pandas-0.10.0.win-AMD64-py2.7 mais je vérifiais si un bug avait été corrigé dans une version plus récente de pandas. J'ai donc fait un easy_install -U pour forcer la mise à jour, mais j'ai eu l'erreur ci-dessus à cause d'incompatibilités avec numpy, etc.

import pandas

Pour résoudre ce problème, je viens de réinstaller le fichier binaire pandas-0.10.0.win-AMD64-py2.7 et tout fonctionne. Je n'ai pas vu cette réponse (suggère d'utiliser pip), ce qui m'a peut-être aidé (mais pas certain) Installez une version particulière avec easy_install

En outre, cela met en évidence pourquoi on devrait utiliser virtualenv (ce que je n'étais pas).

1
Paul

Je viens de rencontrer ce problème 'ValueError' et l'ai abordé. Il y a vraiment quelque chose qui ne va pas avec le paquet numpy.

Mais quand j'essaie de pip install --upgrade numpy cela a échoué, alors je désinstalle et télécharge le plus récent numpy.Zip fichier. Alors manuellement décompresser et python setup.py install il.

Heureusement, ça marche!

0
Yuhao

J'ai eu un problème similaire, et simplement ré-installer en utilisant pip install ... comme suggéré dans les commentaires précédents ne fonctionnait pas.

Ce qui a fonctionné pour moi a été de réinstaller avec le drapeau ajouté pip install --no-cache-dir ..., il semble y avoir une version incompatible de numpy quelque part dans le cache.

0
Yossi Vainshtein

Dans certains cas, vous souhaitez conserver une version spécifique de NumPy et l'option de mise à niveau mentionnée ici ne fonctionnera pas. La distribution Python préinstallée avec ArcGIS. Pour que ArcPy fonctionne dans ArcGIS 10.5.1, cette distribution doit être Python 2.7.). 12 avec NumPy 1.9.3 et toute autre version de NumPy va probablement causer des problèmes avec votre fonctionnalité ArcPy.

Dans ce cas, essayez d’installer une ancienne version spécifique de la bibliothèque tierce problématique supposée être compatible avec l’ancienne version de NumPy d’ArcGIS.

Par exemple, scikit-learn 0.19.1 NE fonctionnerait pas avec NumPy 1.9.3 et entraînerait la même erreur que vous avez mentionnée. Cependant, scikit-learn 0.15 fonctionne bien. Vous pouvez tester différentes versions pour trouver celle qui fonctionne. Il suffit de mentionner le numéro de version via pip:

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

Comme @ user333700, les versions requises des bibliothèques peuvent ne pas se rencontrer. Vous obtenez une bibliothèque comme dépendance d'une autre. Ensuite, sans savoir si elle était déjà installée en tant que dépendance, vous avez besoin de cette bibliothèque spécifique et vous installez une version. Avec de telles façons, les dépendances peuvent gâcher.

J'ai vécu un tel cas et cherché une solution. Trouvé ceci: https://stackoverflow.com/a/12975518/1694344

J'ai eu deux versions différentes pour le fichier Egg-info et le nom de dossier de 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

Je les ai tous supprimés et j'ai réinstallé numpy avec pip.

0
Sedat Kestepe