ValueError: numpy.dtype tem o tamanho errado, tente recompilar

86

Acabei de instalar o pacote pandas e modelos de estatísticas no meu python 2.7 Quando tentei "importar pandas como pd", surgiu esta mensagem de erro. Alguém pode ajudar? Obrigado!!!

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
fonte
1
Como você instalou o pandas?
Andy Hayden
1
possível duplicata de Não é possível importar Scikit-Learn
Bakuriu
Você tentou recompilar?
asmeurer de
Por que não usar a distribuição python (x, y), enthought ou winpython? Eles são projetados especificamente para eliminar esses problemas de compilação e instalação para usuários científicos do python no Windows e vêm com a maioria dos pacotes que você provavelmente deseja pré-compilados.
DaveP
38
Esta mensagem aparece quando o pandas é compilado com uma versão numpy mais recente do que aquela que você instalou. Você precisa recompilar o pandas com a versão numpy que você instalou ou atualizar o numpy.
Josef

Respostas:

64

(para expandir um pouco o meu comentário)

Os desenvolvedores do Numpy seguem em geral uma política de manter uma interface binária compatível com versões anteriores (ABI). No entanto, a ABI não é compatível com versões futuras.

O que isso significa:

Um pacote que usa numpy em uma extensão compilada é compilado em uma versão específica de numpy. A versão futura do numpy será compatível com a extensão compilada do pacote (para exceção, veja abaixo). Os distribuidores desses outros pacotes não precisam recompilar seus pacotes com as versões mais recentes de numpy e os usuários não precisam atualizar esses outros pacotes quando os usuários atualizam para uma versão mais recente de numpy.

No entanto, isso não vai na outra direção. Se um pacote é compilado em uma versão numpy específica, digamos 1.7, então não há garantia de que os binários desse pacote funcionarão com versões numpy mais antigas, digamos 1.6, e muitas vezes ou na maioria das vezes não.

A distribuição binária de pacotes como pandas e modelos de estatísticas, que são compilados com uma versão recente do numpy, não funcionará quando uma versão mais antiga do numpy for instalada. Alguns pacotes, por exemplo matplotlib, se bem me lembro, compilam suas extensões contra a versão numpy mais antiga que eles suportam. Nesse caso, os usuários com a mesma versão antiga ou mais recente do numpy podem usar esses binários.

A mensagem de erro na pergunta é um resultado típico de incompatibilidades binárias.

A solução é obter uma versão binária compatível, atualizando o numpy para pelo menos a versão com a qual os pandas ou modelos de estatísticas foram compilados, ou recompilar os pandas e modelos de estatísticas com a versão mais antiga de numpy que já está instalada.

Quebrando a compatibilidade com versões anteriores da ABI:

Às vezes, melhorias ou refatorações na compatibilidade com versões anteriores da ABI. Isso aconteceu (não intencionalmente) com numpy 1.4.0. Como consequência, os usuários que atualizaram o numpy para 1.4.0, tinham incompatibilidades binárias com todos os outros pacotes compilados, que foram compilados com uma versão anterior do numpy. Isso requer que todos os pacotes com extensões binárias que usam numpy tenham que ser recompilados para funcionar com a versão incompatível com ABI.

Josef
fonte
1
Tentei atualizar o numpy e o pandas e ainda recebo este erro, alguma ideia?
NotSoShabby
37

Para mim (Mac OS X Maverics, Python 2.7)

easy_install --upgrade numpy

ajudou. Depois disso, você pode instalar pacotes atualizados, pandas , scikit-learn , etc. usando pip :

pip install pandas
Fedor Chervinskii
fonte
3
Acabei de executar "easy_install --upgrade numpy", mas não instalei pacotes relacionados a atualizações, como pandas andk scikit-learn. Está tudo bem também.
xjzhou
Funcionou para mim também (Ubuntu 14.04, Python 2.7)
Henry Chinner
30

Achei que era uma versão simples desatualizada ou incompatível e foi corrigido com:

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

Ou pode funcionar com um forro:

pip install --upgrade numpy scipy pandas
RexFuzzle
fonte
Com as mudanças el capitan no OSX, eu recomendo usar --user como um argumento adicional para evitar que o pip sobrescreva os arquivos do sistema. Caso contrário, os usuários se sentirão tentados a usar o sudo.
Roy Iacob
@ Roy- Isso depende se o sistema python está sendo usado ou se a versão brew afaik sudo não deve ser necessária com o brew python.
RexFuzzle 01 de
5

Tive um erro semelhante com outra biblioteca e percebi que tinha várias versões do numpy instaladas no meu sistema. A correção para mim foi editar meu PYTHONPATH e colocar os pacotes do site que continham a última versão do numpy na primeira posição.

Calimo
fonte
2

Como aqui , pra mim só sudo pip install pandas==0.13.1funcionou

Tal
fonte
1

Também encontro esse erro ao usar o pandas para acessar o MYSQL. Esta mensagem de erro indica um problema de compatibilidade binária e pode ser resolvido usando a versão mais recente do pandas e do pacote numpy. Aqui estão meus passos para resolver esse problema e funciona bem no meu 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
fonte
1
Fiz isso e recebi este erroFile "numpy/core/setup.py", line 654, in get_mathlib_info RuntimeError: Broken toolchain: cannot link a simple C program
Mona Jalal
1

No meu caso, instalei o pandas-0.10.0.win-amd64-py2.7, mas estava verificando se um bug foi corrigido em uma versão mais recente do pandas. Então eu fiz um easy_install -U para forçar a atualização, mas depois recebi o erro acima devido a algumas incompatibilidades com numpy etc ... quando fiz

import pandas

Para corrigir, acabei de reinstalar o binário pandas-0.10.0.win-amd64-py2.7 e tudo funciona. Não vi esta resposta (sugere o uso de pip), o que pode ter me ajudado (embora não tenha certeza) Instalar uma versão particular com easy_install

Isso também destaca por que se deve usar o virtualenv (o que eu não usava).

Paulo
fonte
1

Para mim (Mac OS X Mavericks) funcionou para instalar a versão para python2.6:

sudo port install py26-scikit-learn

então corra:

python2.6 myscript.py
user3915137
fonte
1

O problema que resolvi no Webfaction era a antiga biblioteca numpy (1.5) que estava em conflito com a minha nova

pip instalar pandas

instalação em .virtualenv.

O problema foi resolvido depois que eu fiz pip install pandas fora do ambiente virtual. A ideia surgiu de uma discussão em https://github.com/pydata/pandas/issues/3711 , obrigado, cpcloud !

ph7
fonte
0

Acabei de encontrar esse problema de 'ValueError' e resolvi-o. Definitivamente, há algo errado com o pacote entorpecido.

Mas quando tentei pip install --upgrade numpyfalhar, desinstalei e baixei o numpy.ziparquivo mais recente . Em seguida, descompacte manualmente e python setup.py install.

Felizmente, funciona!

Yuhao
fonte
Também falhou para mim. Então tentei sudo pip install --upgrade numpye funcionou.
Harsh Wardhan
0

Como @ user333700 disse, as versões necessárias das bibliotecas podem não se encontrar. Você obtém uma biblioteca como dependência de outra. Então, sem saber que já foi instalado como dependência, você precisa daquela biblioteca específica e instala uma versão. Com essas formas, as dependências podem bagunçar.

Vivi um caso assim e procurei uma solução. Encontrou isto: https://stackoverflow.com/a/12975518/1694344

Eu tinha duas versões diferentes para o arquivo de informações do ovo e o nome da pasta 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

Eu removi todos eles e reinstalei numpy com pip.

Sedat Kestepe
fonte
0

Tive um problema semelhante e simplesmente reinstalei usando pip install ... o sugerido nos comentários anteriores não funcionou.

O que funcionou para mim foi reinstalar com o sinalizador adicionado pip install --no-cache-dir ..., parece que havia uma versão incompatível em algum lugar do cache.

Yossi Vainshtein
fonte
-1

Há casos em que você deseja manter uma versão específica do NumPy e a opção de atualização mencionada aqui não funcionará. Um exemplo que me ocorreu foi a distribuição Python pré-instalada com ArcGIS. Para que o ArcPy funcione no ArcGIS 10.5.1, essa distribuição precisa ser Python 2.7.12 com NumPy 1.9.3 e qualquer outra versão do NumPy provavelmente causará problemas com a funcionalidade do ArcPy.

O que você pode fazer com este caso é tentar instalar uma versão mais antiga específica da problemática biblioteca de terceiros que é supostamente compatível com a versão NumPy mais antiga que o ArcGIS possui.

Por exemplo, o scikit-learn 0.19.1 NÃO funcionaria com o NumPy 1.9.3 e resultaria no mesmo erro que você mencionou. No entanto, o scikit-learn 0.15 funciona bem. Você pode testar versões diferentes para encontrar aquela que funciona. Basta mencionar o número da versão por meio do pip:

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