ValueError: numpy.dtype має неправильний розмір, спробуйте перекомпілювати


86

Я щойно встановив пакет pandas і statsmodels на моєму python 2.7. Коли я спробував «імпортувати pand як pd», з’являється це повідомлення про помилку. Хто-небудь може допомогти? Дякую!!!

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
Як ви встановлювали панди?
Andy Hayden,


Спробували перекомпілювати?
asmeurer

Чому б не використовувати розподіл python (x, y), enthought або winpython? Вони спеціально розроблені для усунення цих проблем компіляції та інсталяції для наукових користувачів Python під Windows і постачаються з більшістю пакунків, які ви, напевно, хочете скомпілювати.
DaveP

39
Це повідомлення з'являється, коли панди компілюються до нової версії numpy, ніж встановленої вами. Вам потрібно або перекомпілювати панди у встановленій версії numpy, або оновити numpy.
Йозеф

Відповіді:


65

(щоб трохи розширити мій коментар)

Розробники Numpy загалом дотримуються політики збереження зворотного сумісного двійкового інтерфейсу (ABI). Однак ABI не є прямим сумісним.

Що це означає:

Пакет, який використовує numpy у скомпільованому розширенні, компілюється щодо певної версії numpy. Майбутня версія numpy буде сумісна зі скомпільованим розширенням пакету (виняток див. Нижче). Розповсюджувачам цих інших пакунків не потрібно перекомпілювати свій пакет із новіших версій numpy, а користувачам не потрібно оновлювати ці інші пакети, коли користувачі оновлюються до новішої версії numpy.

Однак це не йде в інший бік. Якщо пакет компілюється з певною версією numpy, скажімо 1.7, тоді немає жодних гарантій того, що бінарні файли цього пакету працюватимуть зі старими версіями numpy, скажімо 1.6, і дуже часто або більшу частину часу вони цього не роблять.

Бінарний розподіл пакетів, таких як панди та statsmodels, які компілюються щодо останньої версії numpy, не працюватиме, коли встановлено стару версію numpy. Деякі пакунки, наприклад matplotlib, якщо я добре пам’ятаю, компілюють свої розширення до найстарішої версії numpy, яку вони підтримують. У цьому випадку користувачі з тією ж старою або будь-якою останньою версією numpy можуть використовувати ці двійкові файли.

Повідомлення про помилку у питанні є типовим результатом двійкової несумісності.

Рішення полягає в тому, щоб отримати бінарну сумісну версію, або шляхом оновлення numpy принаймні до тієї версії, щодо якої були скомпільовані панди або statsmodels, або для перекомпіляції pandas і statsmodels проти старої версії numpy, яка вже встановлена.

Порушення зворотної сумісності ABI:

Іноді вдосконалення або рефакторинг в numpy порушують зворотну сумісність ABI. Це сталося (ненавмисно) з numpy 1.4.0. Як наслідок, користувачі, які оновили numpy до 1.4.0, мали двійкові несумісності з усіма іншими скомпільованими пакетами, які були скомпільовані щодо попередньої версії numpy. Це вимагає, щоб усі пакети з двійковими розширеннями, які використовують numpy, повинні бути перекомпільовані для роботи з несумісною версією ABI.


1
Я спробував оновити numpy і pandas, і все ще отримую цю помилку. Будь-які ідеї?
NotSoShabby

37

Для мене (Mac OS X Maverics, Python 2.7)

easy_install --upgrade numpy

допоміг. Після цього ви можете встановити сучасні пакети pandas , scikit-learn тощо за допомогою pip :

pip install pandas

3
Я щойно виконав "easy_install --upgrade numpy", але не встановив сучасні пакунки, такі як pandas andk scikit-learn. Все теж нормально.
xjzhou

Працював і для мене (Ubuntu 14.04, Python 2.7)
Генрі Чіннер

30

Я виявив, що це проста версія, яка застаріла або не відповідає, і була виправлена:

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

Або може працювати з одним лайнером:

pip install --upgrade numpy scipy pandas

Застосовуючи зміни el capitan в OSX, я рекомендую використовувати --user як додатковий аргумент, щоб запобігти перезапису pip системних файлів. В іншому випадку користувачі відчують спокусу використовувати sudo.
Рой Якоб,

@ Roy - Це залежить від того, чи використовується системний python, чи не потрібна версія заварювання afaik- sudo з brew python.
RexFuzzle

5

У мене була подібна помилка з іншою бібліотекою, і я зрозумів, що в моїй системі встановлено кілька версій numpy. Виправленням для мене було редагування мого PYTHONPATH та розміщення пакетів сайтів, що містять останню версію numpy, на перше місце.



1

Я також стикаюся з цією помилкою, коли використовую панди для доступу до MYSQL. Це повідомлення про помилку вказує на бінарну сумісну проблему, і її можна вирішити за допомогою останньої версії pandas та пакету numpy. Ось мої кроки для вирішення цієї проблеми, і це добре працює на моєму 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
Я зробив це і отримав цю помилкуFile "numpy/core/setup.py", line 654, in get_mathlib_info RuntimeError: Broken toolchain: cannot link a simple C program
Mona Jalal

1

У моєму випадку я встановив pandas-0.10.0.win-amd64-py2.7, але перевіряв, чи не було виправлено помилку в останній версії pandas. Тому я зробив easy_install -U, щоб змусити оновити, але потім отримав вищевказану помилку через деякі несумісності з numpy тощо ... коли я це зробив

import pandas

Для виправлення я просто перевстановив двійковий файл pandas-0.10.0.win-amd64-py2.7 і все працює. Я не побачив цієї відповіді (пропонує використовувати pip), що, можливо, мені допомогло (хоча не впевнений) Встановіть певну версію за допомогою easy_install

Також це підкреслює, чому слід використовувати virtualenv (яким я не був).


1

Для мене (Mac OS X Mavericks) вдалося встановити версію для python2.6:

sudo port install py26-scikit-learn

потім запустіть:

python2.6 myscript.py

1

Проблемою, яку я вирішив на Webfaction, була стара бібліотека numpy (1.5), яка суперечила моїй свіжій

pip встановити панди

установка в .virtualenv.

Проблема була вирішена після того, як я піп встановив панди з віртуального середовища. Ідея виникла з обговорення на https://github.com/pydata/pandas/issues/3711 , дякую, cpcloud !


0

Я просто зустрічаю цю проблему "ValueError" і розглядаю її. Безумовно, щось не так з пакетом numpy.

Але коли я намагаюся зробити pip install --upgrade numpyце не вдалося, я видаляю та завантажую найновіший numpy.zipфайл. Потім вручну розпакуйте і python setup.py installце.

На щастя, це працює!


Це не вдалося і мені. Потім я спробував, sudo pip install --upgrade numpyі це спрацювало.
Harsh Wardhan

0

Як сказав @ user333700, необхідні версії бібліотек можуть не відповідати одна одній. Ви отримуєте одну бібліотеку як залежність іншої. Тоді, не знаючи, що вона вже встановлена ​​як залежність, вам потрібна ця конкретна бібліотека і ви встановлюєте одну версію. Таким чином, залежності можуть зіпсуватись.

Я жив у такій справі і шукав рішення. Знайшов це: https://stackoverflow.com/a/12975518/1694344

У мене було дві різні версії файлу-яйця-інформації та імені папки 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

Я видалив їх усіх і перевстановив numpy за допомогою pip.


0

У мене була подібна проблема, і просто перевстановлення за допомогою, pip install ...як було запропоновано в попередніх коментарях, не спрацювало.

Мені вдалося перевстановити доданий прапор pip install --no-cache-dir ..., здається, десь у кеші була несумісна версія numpy.


-1

Бувають випадки, коли ви хочете зберегти певну версію NumPy, і зазначена тут опція оновлення не буде працювати. Прикладом, який мені спав на думку, був розподіл Python, попередньо встановлений ArcGIS. Щоб ArcPy працював в ArcGIS 10.5.1, цей розподіл повинен бути Python 2.7.12 з NumPy 1.9.3, а будь-яка інша версія NumPy, ймовірно, спричинить проблеми з функціональністю ArcPy.

Що ви можете зробити в цьому випадку, це спробувати встановити конкретну, стару версію проблемної сторонньої бібліотеки, яка повинна бути сумісною зі старою версією NumPy, яку має ArcGIS.

Наприклад, scikit-learn 0.19.1 НЕ буде працювати з NumPy 1.9.3 і призведе до тієї ж помилки, яку ви згадали. Однак scikit-learn 0,15 чудово працює. Ви можете протестувати різні версії, щоб знайти ту, яка працює. Просто згадайте номер версії через pip:

python -m pip install scikit-learn==0.15
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.