ValueError: numpy.dtype memiliki ukuran yang salah, coba kompilasi ulang


86

Saya baru saja menginstal paket pandas dan statsmodels di python 2.7 saya. Ketika saya mencoba "import pandas as pd", pesan kesalahan ini keluar. Adakah yang bisa membantu? Terima kasih!!!

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
Bagaimana Anda menginstal panda?
Andy Hayden


Apakah Anda mencoba mengompilasi ulang?
asmeurer

Mengapa tidak menggunakan distribusi python (x, y), entought atau winpython? Mereka secara khusus dirancang untuk menghilangkan masalah kompilasi dan instalasi ini untuk pengguna python ilmiah di bawah windows dan datang dengan sebagian besar paket yang mungkin ingin Anda kompilasi sebelumnya.
DaveP

39
Pesan ini muncul saat panda dikompilasi dengan versi numpy yang lebih baru daripada yang telah Anda instal. Anda juga perlu mengkompilasi ulang panda terhadap versi numpy yang telah Anda instal atau perbarui numpy.
Josef

Jawaban:


65

(untuk memperluas sedikit komentar saya)

Pengembang Numpy secara umum mengikuti kebijakan untuk mempertahankan antarmuka biner yang kompatibel dengan versi sebelumnya (ABI). Namun, ABI tidak kompatibel ke depan.

Apa itu artinya:

Sebuah paket, yang menggunakan numpy dalam ekstensi terkompilasi, dikompilasi terhadap versi numpy tertentu. Versi numpy yang akan datang akan kompatibel dengan ekstensi paket yang telah dikompilasi (untuk pengecualian lihat di bawah). Distributor paket lain tersebut tidak perlu mengkompilasi ulang paket mereka terhadap versi numpy yang lebih baru dan pengguna tidak perlu memperbarui paket lain ini, ketika pengguna memperbarui ke versi numpy yang lebih baru.

Namun, ini tidak menuju ke arah lain. Jika sebuah paket dikompilasi terhadap versi numpy tertentu, katakanlah 1.7, maka tidak ada jaminan bahwa binari dari paket itu akan bekerja dengan versi numpy yang lebih lama, katakanlah 1.6, dan seringkali atau sebagian besar waktu tidak akan berfungsi.

Distribusi biner dari paket-paket seperti pandas dan statsmodels, yang dikompilasi terhadap versi terbaru dari numpy, tidak akan berfungsi ketika versi lama dari numpy diinstal. Beberapa paket, misalnya matplotlib, jika saya ingat dengan benar, mengkompilasi ekstensi mereka terhadap versi numpy terlama yang mereka dukung. Dalam hal ini, pengguna dengan versi lama yang sama atau versi yang lebih baru dari numpy dapat menggunakan biner tersebut.

Pesan kesalahan dalam pertanyaan adalah hasil tipikal dari inkompatibilitas biner.

Solusinya adalah mendapatkan versi yang kompatibel dengan biner, baik dengan memperbarui numpy setidaknya ke versi yang menjadi dasar kompilasi pandas atau statsmodels, atau dengan mengkompilasi ulang pandas dan statsmodels terhadap versi lama dari numpy yang sudah diinstal.

Memecah kompatibilitas mundur ABI:

Terkadang peningkatan atau pemfaktoran ulang di numpy merusak kompatibilitas mundur ABI. Ini terjadi (tidak sengaja) dengan numpy 1.4.0. Akibatnya, pengguna yang mengupdate numpy ke 1.4.0, mengalami inkompatibilitas biner dengan semua paket terkompilasi lainnya, yang dikompilasi terhadap versi numpy sebelumnya. Hal ini mengharuskan semua paket dengan ekstensi biner yang menggunakan numpy harus dikompilasi ulang untuk bekerja dengan versi yang tidak kompatibel dengan ABI.


1
Saya mencoba memperbarui numpy dan pandas dan saya masih mendapatkan kesalahan ini, Ada ide?
NotSoShabby

37

Bagi saya (Mac OS X Maverics, Python 2.7)

easy_install --upgrade numpy

membantu. Setelah ini, Anda dapat menginstal paket terbaru pandas , scikit-learn , dll menggunakan pip :

pip install pandas

3
Saya baru saja menjalankan "easy_install --upgrade numpy", tetapi tidak menginstal paket terkait terbaru seperti pandas andk scikit-learn. Semuanya juga baik-baik saja.
xjzhou

Bekerja untuk saya juga (Ubuntu 14.04, Python 2.7)
Henry Chinner

30

Menurut saya, ini adalah versi sederhana yang kedaluwarsa atau tidak cocok dan diperbaiki dengan:

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

Atau mungkin bekerja dengan satu liner:

pip install --upgrade numpy scipy pandas

Dengan perubahan el capitan di OSX, saya sarankan menggunakan --user sebagai argumen tambahan untuk mencegah pip menimpa file sistem. Pengguna akan merasa tergoda untuk menggunakan sudo.
Roy Iacob

@ Roy- Ini tergantung pada apakah sistem python sedang digunakan atau versi brew afaik- sudo tidak diperlukan dengan brew python.
RexFuzzle

5

Saya mengalami kesalahan serupa dengan pustaka lain dan menyadari bahwa saya memiliki beberapa versi numpy yang diinstal di sistem saya. Perbaikan bagi saya adalah mengedit PYTHONPATH saya dan meletakkan paket situs yang berisi versi terbaru numpy di posisi pertama.


2

Seperti di sini , bagi saya hanya sudo pip install pandas==0.13.1bekerja


1

Saya juga mengalami kesalahan ini saat menggunakan panda untuk mengakses MYSQL. Pesan kesalahan ini menunjukkan masalah kompatibel biner dan dapat diselesaikan dengan menggunakan versi terbaru dari paket pandas dan numpy. Berikut adalah langkah-langkah saya untuk menyelesaikan masalah ini, dan berfungsi dengan baik di Ubuntu 12.04 saya:

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
Saya melakukan ini dan mendapatkan kesalahan iniFile "numpy/core/setup.py", line 654, in get_mathlib_info RuntimeError: Broken toolchain: cannot link a simple C program
Mona Jalal

1

Dalam kasus saya, saya telah menginstal pandas-0.10.0.win-amd64-py2.7 tetapi sedang memeriksa untuk melihat apakah bug telah diperbaiki di versi panda yang lebih baru. Jadi saya melakukan easy_install -U untuk memaksa peningkatan, tetapi kemudian mendapat kesalahan di atas karena beberapa ketidakcocokan dengan numpy dll ... ketika saya melakukannya

import pandas

Untuk memperbaikinya, saya baru saja menginstal ulang biner pandas-0.10.0.win-amd64-py2.7 dan semuanya berfungsi. Saya tidak melihat jawaban ini (menyarankan untuk menggunakan pip) yang mungkin telah membantu saya (meskipun tidak yakin) Instal versi tertentu dengan easy_install

Juga ini menyoroti mengapa seseorang harus menggunakan virtualenv (yang saya tidak).


1

Bagi saya (Mac OS X Mavericks) berhasil menginstal versi untuk python2.6:

sudo port install py26-scikit-learn

lalu lari:

python2.6 myscript.py

1

Masalah yang saya selesaikan di Webfaction adalah pustaka numpy lama (1.5) yang bertentangan dengan yang baru

pip install panda

instalasi di .virtualenv.

Masalahnya terpecahkan setelah saya melakukan pip install pandas dari lingkungan virtual. Idenya datang dari diskusi di https://github.com/pydata/pandas/issues/3711 , terima kasih, cpcloud !


0

Saya baru saja menemui masalah 'ValueError' ini dan telah mengatasinya. Pasti ada yang salah dengan paket numpy.

Tapi ketika saya coba pip install --upgrade numpygagal, jadi saya uninstall dan download numpy.zipfile terbaru . Kemudian secara manual buka kompres dan python setup.py installitu.

Untungnya, ini berhasil!


Itu juga gagal bagi saya. Kemudian saya mencoba sudo pip install --upgrade numpydan berhasil.
Harsh Wardhan

0

Seperti yang dikatakan @ user333700, versi pustaka yang diperlukan mungkin tidak saling bertemu. Anda mendapatkan satu pustaka sebagai dependensi lainnya. Kemudian tanpa mengetahui itu sudah diinstal sebagai dependensi, Anda memerlukan pustaka khusus itu dan Anda menginstal satu versi. Dengan cara seperti itu, dependensi dapat mengacaukan.

Saya menjalani kasus seperti itu dan mencari solusi. Menemukan ini: https://stackoverflow.com/a/12975518/1694344

Saya memiliki dua versi berbeda untuk file info telur dan nama folder 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

Saya menghapus semuanya dan menginstal ulang numpy dengan pip.


0

Saya mengalami masalah serupa, dan cukup menginstal ulang menggunakan pip install ... seperti yang disarankan dalam komentar sebelumnya tidak berfungsi.

Apa yang berhasil untuk saya adalah menginstal ulang dengan bendera yang ditambahkan pip install --no-cache-dir ..., tampaknya ada versi numpy yang tidak kompatibel di suatu tempat di cache.


-1

Ada kasus di mana Anda ingin menyimpan versi NumPy tertentu dan opsi peningkatan yang disebutkan di sini tidak akan berfungsi. Contoh yang terpikir oleh saya adalah distribusi Python yang sudah diinstal sebelumnya dengan ArcGIS. Agar ArcPy dapat bekerja di ArcGIS 10.5.1, distribusi tersebut harus Python 2.7.12 dengan NumPy 1.9.3 dan versi NumPy lainnya mungkin akan menyebabkan masalah dengan fungsionalitas ArcPy Anda.

Apa yang dapat Anda lakukan dengan kasus ini adalah mencoba menginstal versi tertentu dari perpustakaan pihak ketiga yang bermasalah yang seharusnya kompatibel dengan versi NumPy yang lebih lama yang dimiliki ArcGIS.

Misalnya, scikit-learn 0.19.1 TIDAK akan beroperasi dengan NumPy 1.9.3 dan akan menghasilkan kesalahan yang sama seperti yang Anda sebutkan. Namun, scikit-learn 0.15 berfungsi dengan baik. Anda dapat menguji berbagai versi untuk menemukan versi yang berfungsi. Sebutkan saja nomor versinya melalui pip:

python -m pip install scikit-learn==0.15
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.