ValueError: numpy.dtype tiene el tamaño incorrecto, intente volver a compilar

86

Acabo de instalar el paquete pandas y statsmodels en mi python 2.7. Cuando intenté "importar pandas como pd", aparece este mensaje de error. ¿Alguien puede ayudar? ¡¡¡Gracias!!!

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
Ámbar chen
fuente
1
¿Cómo instalaste pandas?
Andy Hayden
1
posible duplicado de No se puede importar Scikit-Learn
Bakuriu
¿Intentaste volver a compilar?
asmeurer
¿Por qué no utilizar la distribución python (x, y), entusiasta o winpython? Están diseñados específicamente para eliminar estos problemas de compilación e instalación para los usuarios científicos de Python en Windows y vienen con la mayoría de los paquetes que probablemente desee precompilar.
DaveP
38
Este mensaje aparece cuando los pandas se compilan con una versión numérica más nueva que la que ha instalado. Debe volver a compilar pandas con la versión numpy que ha instalado o actualizar numpy.
Josef

Respuestas:

64

(ampliar un poco mi comentario) a.

Los desarrolladores de Numpy siguen en general una política de mantener una interfaz binaria compatible con versiones anteriores (ABI). Sin embargo, el ABI no es compatible con versiones posteriores.

Que significa eso:

Un paquete, que usa numpy en una extensión compilada, se compila con una versión específica de numpy. La versión futura de numpy será compatible con la extensión compilada del paquete (para una excepción, consulte a continuación). Los distribuidores de esos otros paquetes no necesitan recompilar su paquete con una versión más reciente de numpy y los usuarios no necesitan actualizar estos otros paquetes, cuando los usuarios actualizan a una versión más nueva de numpy.

Sin embargo, esto no va en la otra dirección. Si un paquete se compila con una versión numérica específica, digamos 1.7, entonces no hay garantía de que los binarios de ese paquete funcionen con versiones numpy más antiguas, digamos 1.6, y muy a menudo o la mayoría de las veces no lo harán.

La distribución binaria de paquetes como pandas y statsmodels, que se compilan con una versión reciente de numpy, no funcionará cuando se instale una versión anterior de numpy. Algunos paquetes, por ejemplo matplotlib, si mal no recuerdo, compilan sus extensiones con la versión numpy más antigua que admiten. En este caso, los usuarios con la misma versión antigua o más reciente de numpy pueden usar esos binarios.

El mensaje de error en la pregunta es un resultado típico de incompatibilidades binarias.

La solución es obtener una versión binaria compatible, ya sea actualizando numpy a al menos la versión con la que se compilaron pandas o statsmodels, o recompilar pandas y statsmodels con la versión anterior de numpy que ya está instalada.

Rompiendo la compatibilidad con versiones anteriores de ABI:

A veces, las mejoras o refactorizaciones en numpy rompen la compatibilidad con versiones anteriores de ABI. Esto sucedió (sin querer) con numpy 1.4.0. Como consecuencia, los usuarios que actualizaron numpy a 1.4.0 tenían incompatibilidades binarias con todos los demás paquetes compilados, que se compilaron con una versión anterior de numpy. Esto requiere que todos los paquetes con extensiones binarias que usan numpy se recompilen para que funcionen con la versión incompatible con ABI.

Josef
fuente
1
Intenté actualizar numpy y pandas y sigo recibiendo este error, ¿alguna idea?
NotSoShabby
37

Para mí (Mac OS X Maverics, Python 2.7)

easy_install --upgrade numpy

ayudado. Después de esto, puede instalar paquetes actualizados pandas , scikit-learn , etc.usando pip :

pip install pandas
Fedor Chervinskii
fuente
3
Acabo de ejecutar "easy_install --upgrade numpy", pero no instalé paquetes relacionados actualizados como pandas yk scikit-learn. Todo esta bien tambien.
xjzhou
También funcionó para mí (Ubuntu 14.04, Python 2.7)
Henry Chinner
30

Descubrí que era una versión simple que estaba desactualizada o no coincidía y se solucionó con:

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

O podría funcionar con el delineador único:

pip install --upgrade numpy scipy pandas
RexFuzzle
fuente
Con los cambios de el capitan en OSX, recomiendo usar --user como un argumento adicional para evitar que pip sobrescriba los archivos del sistema. De lo contrario, los usuarios se sentirán tentados a usar sudo.
Roy Iacob
@ Roy- Esto depende de si se está usando el sistema python o si la versión brew afaik-sudo no debería ser necesaria con brew python.
RexFuzzle
5

Tuve un error similar con otra biblioteca y me di cuenta de que tenía varias versiones de numpy instaladas en mi sistema. La solución para mí fue editar mi PYTHONPATH y poner los paquetes del sitio que contenían la última versión de numpy en primera posición.

Calimo
fuente
2

Como aquí , para mí solo sudo pip install pandas==0.13.1funcionó

Tal
fuente
1

También encuentro este error cuando uso pandas para acceder a MYSQL. Este mensaje de error indica un problema de compatibilidad binaria y se puede resolver utilizando la última versión de pandas y el paquete numpy. Estos son mis pasos para resolver este problema y funciona bien en mi 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
fuente
1
Hice esto y recibí este errorFile "numpy/core/setup.py", line 654, in get_mathlib_info RuntimeError: Broken toolchain: cannot link a simple C program
Mona Jalal
1

En mi caso, había instalado pandas-0.10.0.win-amd64-py2.7 pero estaba verificando si se había solucionado un error en una versión más reciente de pandas. Así que hice un easy_install -U para forzar la actualización, pero luego obtuve el error anterior debido a algunas incompatibilidades con numpy, etc. cuando lo hice

import pandas

Para solucionarlo, acabo de reinstalar el binario pandas-0.10.0.win-amd64-py2.7 y todo funciona. No vi esta respuesta (sugiere usar pip) que puede haberme ayudado (aunque no estoy seguro) a instalar una versión particular con easy_install

También esto destaca por qué uno debería usar virtualenv (que yo no era).

Paul
fuente
1

Para mí (Mac OS X Mavericks) funcionó instalar la versión para python2.6:

sudo port install py26-scikit-learn

entonces corre:

python2.6 myscript.py
user3915137
fuente
1

El problema que resolví en Webfaction fue la antigua biblioteca numpy (1.5) que estaba en conflicto con mi nueva

pip instalar pandas

instalación en .virtualenv.

El problema se resolvió después de que pip instalé pandas fuera del entorno virtual. La idea surgió de la discusión en https://github.com/pydata/pandas/issues/3711 , ¡gracias, cpcloud !

ph7
fuente
0

Acabo de encontrarme con este problema de "ValueError" y lo he abordado. Definitivamente hay algo mal con el paquete numpy.

Pero cuando intento pip install --upgrade numpyfallar, desinstalo y descargo el numpy.ziparchivo más nuevo . Luego descomprímalo manualmente y python setup.py installlo.

¡Por suerte, funciona!

Yuhao
fuente
También me falló a mí. Luego lo intenté sudo pip install --upgrade numpyy funcionó.
Harsh Wardhan
0

Como dijo @ user333700, las versiones requeridas de las bibliotecas pueden no coincidir entre sí. Obtienes una biblioteca como dependencia de otra. Luego, sin saber que ya estaba instalado como dependencia, necesita esa biblioteca específica e instala una versión. Con tales formas, las dependencias pueden estropearse.

Viví un caso así y busqué una solución. Encontré esto: https://stackoverflow.com/a/12975518/1694344

Tenía dos versiones diferentes para el archivo de información del huevo y el nombre de la carpeta 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

Los eliminé todos y reinstalé numpy con pip.

Sedat Kestepe
fuente
0

Tuve un problema similar y simplemente reinstalar usando pip install ...como se sugirió en comentarios anteriores no funcionó.

Lo que funcionó para mí fue reinstalar con la bandera agregada pip install --no-cache-dir ..., parece que había una versión numpy incompatible en algún lugar del caché.

Yossi Vainshtein
fuente
-1

Hay casos en los que desea mantener una versión específica de NumPy y la opción de actualización mencionada aquí no funcionará. Un ejemplo que se me ocurrió fue la distribución de Python preinstalada con ArcGIS. Para que ArcPy funcione en ArcGIS 10.5.1, esa distribución debe ser Python 2.7.12 con NumPy 1.9.3 y cualquier otra versión de NumPy probablemente causará problemas con la funcionalidad de ArcPy.

Lo que puede hacer con este caso es intentar instalar una versión anterior específica de la biblioteca de terceros problemática que se supone que es compatible con la versión anterior de NumPy que tiene ArcGIS.

Por ejemplo, scikit-learn 0.19.1 NO funcionaría con NumPy 1.9.3 y daría como resultado el mismo error que mencionaste. Sin embargo, scikit-learn 0.15 funciona bien. Puede probar diferentes versiones para encontrar la que funcione. Solo menciona el número de versión a través de pip:

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