ValueError: numpy.dtype a la mauvaise taille, essayez de recompiler


86

Je viens d'installer le paquet pandas et statsmodels sur mon python 2.7 Quand j'ai essayé "importer des pandas en tant que pd", ce message d'erreur apparaît. Quelqu'un peut-il 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

1
Comment as-tu installé les pandas?
Andy Hayden


Avez-vous essayé de recompiler?
asmeurer

Pourquoi ne pas utiliser la distribution python (x, y), enthought ou winpython? Ils sont spécifiquement conçus pour éliminer ces problèmes de compilation et d'installation pour les utilisateurs scientifiques de python sous Windows et sont livrés avec la plupart des packages que vous voudrez probablement précompiler.
DaveP

38
Ce message apparaît lorsque pandas est compilé avec une version numpy plus récente que celle que vous avez installée. Vous devez soit recompiler les pandas avec la version numpy que vous avez installée, soit mettre à jour numpy.
Josef

Réponses:


64

(pour développer un peu mon commentaire)

Les développeurs Numpy suivent en général une politique de conservation d'une interface binaire rétrocompatible (ABI). Cependant, l'ABI n'est pas compatible vers l'avant.

Ce que cela signifie:

Un package, qui utilise numpy dans une extension compilée, est compilé avec une version spécifique de numpy. La future version de numpy sera compatible avec l'extension compilée du paquet (pour l'exception voir 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, lorsque les utilisateurs mettent à jour vers une version plus récente de numpy.

Cependant, cela ne va pas dans l'autre sens. Si un paquet est compilé avec une version numpy spécifique, disons 1.7, alors il n'y a aucune garantie que les binaires de ce paquet fonctionneront avec des versions plus anciennes de numpy, disons 1.6, et très souvent ou la plupart du temps ils ne le seront pas.

La distribution binaire de paquets tels que pandas et statsmodels, compilés avec une version récente de numpy, ne fonctionnera pas lorsqu'une ancienne version de numpy est installée. Certains paquets, par exemple matplotlib, si je me souviens bien, compilent leurs extensions avec la version numpy la plus ancienne qu'ils prennent en charge. Dans ce cas, les utilisateurs avec la même ancienne version ou une version plus récente de numpy peuvent utiliser ces binaires.

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

La solution consiste à obtenir une version compatible binaire, soit en mettant à jour numpy au moins vers la version avec laquelle les pandas ou les statsmodels ont été compilés, soit en recompilant les pandas et les statsmodels avec l'ancienne version de numpy qui est déjà installée.

Rompre la rétrocompatibilité ABI:

Parfois, des améliorations ou des refactorisations dans numpy cassent la rétrocompatibilité ABI. Cela s'est produit (involontairement) avec numpy 1.4.0. En conséquence, les utilisateurs qui ont mis à jour numpy vers la version 1.4.0 avaient 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 doivent être recompilés pour fonctionner avec la version incompatible ABI.


1
J'ai essayé de mettre à jour numpy et pandas et j'obtiens toujours cette erreur, des idées?
NotSoShabby

37

Pour moi (Mac OS X Maverics, Python 2.7)

easy_install --upgrade numpy

aidé. Après cela, vous pouvez installer les packages à jour pandas , scikit-learn , etc. en utilisant pip :

pip install pandas

3
Je viens d'exécuter "easy_install --upgrade numpy", mais je n'ai pas installé de paquets liés à jour comme pandas etk scikit-learn. Tout va bien aussi.
xjzhou

A travaillé pour moi aussi (Ubuntu 14.04, Python 2.7)
Henry Chinner

30

J'ai trouvé que c'était une version simple obsolète ou incompatible et a été corrigée avec:

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

Ou pourrait fonctionner avec la doublure unique:

pip install --upgrade numpy scipy pandas

Avec les modifications el capitan sur OSX, je recommande d'utiliser --user comme argument supplémentaire pour empêcher pip d'écraser les fichiers système. Sinon, les utilisateurs se sentiront tentés d'utiliser sudo.
Roy Iacob

@ Roy- Cela dépend si le système python est utilisé ou si la version brew afaik-sudo ne devrait pas être nécessaire avec brew python.
RexFuzzle

5

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 de modifier mon PYTHONPATH et de mettre les packages de site contenant la dernière version de numpy en première position.


2

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


1

Je rencontre également cette erreur lorsque j'utilise des 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 le package numpy. Voici mes étapes pour résoudre ce problème, et cela fonctionne bien sur mon 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
J'ai fait cela et j'ai eu cette erreurFile "numpy/core/setup.py", line 654, in get_mathlib_info RuntimeError: Broken toolchain: cannot link a simple C program
Mona Jalal

1

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

import pandas

Pour corriger, je viens de réinstaller le 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) qui m'a peut-être aidé (mais pas sûr) à installer une version particulière avec easy_install

Cela met également en évidence pourquoi on devrait utiliser virtualenv (ce que je n'étais pas).


1

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

sudo port install py26-scikit-learn

puis exécutez:

python2.6 myscript.py

1

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 avoir installé des pandas hors de l'environnement virtuel. L'idée est venue d'une discussion sur https://github.com/pydata/pandas/issues/3711 , merci, cpcloud !


0

Je viens de rencontrer ce problème «ValueError» et je l'ai résolu. Il y a certainement quelque chose qui ne va pas avec le package numpy.

Mais lorsque j'essaye, pip install --upgrade numpycela échoue, alors je désinstalle et télécharge le numpy.zipfichier le plus récent . Puis décompressez manuellement et python setup.py installil.

Heureusement, ça marche!


Cela a échoué pour moi aussi. Ensuite, j'ai essayé sudo pip install --upgrade numpyet cela a fonctionné.
Harsh Wardhan

0

Comme @ user333700 l'a dit, les versions requises des bibliothèques peuvent ne pas se rencontrer. Vous obtenez une bibliothèque en tant que dépendance d'une autre. Ensuite, sans savoir qu'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 méthodes, les dépendances peuvent gâcher.

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

J'avais 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 réinstallé numpy avec pip.


0

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 l'indicateur ajouté pip install --no-cache-dir ..., il semble qu'il y avait une version numpy incompatible quelque part dans le cache.


-1

Dans certains cas, vous souhaitez conserver une version spécifique de NumPy et l'option de mise à niveau mentionnée ici ne fonctionnera pas. Un exemple qui m'est venu à l'esprit était la distribution Python préinstallée avec ArcGIS. Pour qu'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.

Ce que vous pouvez faire dans ce cas, c'est essayer d'installer une ancienne version spécifique de la bibliothèque tierce problématique qui est censé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 correctement. Vous pouvez tester différentes versions pour trouver celle qui fonctionne. Mentionnez simplement le numéro de version via pip:

python -m pip install scikit-learn==0.15
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.