ValueError: numpy.dtype có kích thước sai, hãy thử biên dịch lại


86

Tôi vừa cài đặt gói pandas và statsmodels trên python 2.7 của mình Khi tôi thử "nhập gấu trúc dưới dạng pd", thông báo lỗi này xuất hiện. Có ai giúp được không? Cảm ơn!!!

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
Bạn đã cài đặt gấu trúc như thế nào?
Andy Hayden,

1
có thể bản sao của Can không nhập khẩu Scikit-Learn
Bakuriu

Bạn đã thử biên dịch lại?
asmeurer

Tại sao không sử dụng phân phối python (x, y), enthought hoặc winpython? Chúng được thiết kế đặc biệt để loại bỏ các vấn đề về biên dịch và cài đặt này cho người dùng python khoa học trong cửa sổ và đi kèm với hầu hết các gói mà bạn có thể muốn biên dịch trước.
DaveP

38
Thông báo này hiển thị khi gấu trúc được biên dịch dựa trên phiên bản mới hơn so với phiên bản bạn đã cài đặt. Bạn cần phải biên dịch lại gấu trúc so với phiên bản numpy mà bạn đã cài đặt hoặc cập nhật numpy.
Josef

Câu trả lời:


64

(để mở rộng một chút về nhận xét của tôi)

Nhìn chung, các nhà phát triển khó hiểu tuân theo chính sách giữ giao diện nhị phân tương thích ngược (ABI). Tuy nhiên, ABI không tương thích về phía trước.

Điều đó có nghĩa:

Một gói, sử dụng numpy trong một phần mở rộng đã biên dịch, được biên dịch dựa trên một phiên bản cụ thể của numpy. Phiên bản tương lai của numpy sẽ tương thích với phần mở rộng đã biên dịch của gói (ngoại lệ, xem bên dưới). Các nhà phân phối của các gói khác đó không cần phải biên dịch lại gói của họ so với phiên bản mới hơn của numpy và người dùng không cần cập nhật các gói khác này khi người dùng cập nhật lên phiên bản mới hơn của numpy.

Tuy nhiên, điều này không đi theo hướng khác. Nếu một gói được biên dịch dựa trên một phiên bản numpy cụ thể, chẳng hạn 1.7, thì không có gì đảm bảo rằng các mã nhị phân của gói đó sẽ hoạt động với các phiên bản numpy cũ hơn, chẳng hạn 1.6, và rất thường xuyên hoặc hầu hết thời gian chúng sẽ không.

Phân phối nhị phân của các gói như gấu trúc và mô hình thống kê, được biên dịch dựa trên phiên bản gần đây của numpy, sẽ không hoạt động khi phiên bản cũ hơn của numpy được cài đặt. Một số gói, ví dụ như matplotlib, nếu tôi nhớ không nhầm, hãy biên dịch các phần mở rộng của chúng với phiên bản numpy cũ nhất mà chúng hỗ trợ. Trong trường hợp này, người dùng có cùng phiên bản cũ hoặc bất kỳ phiên bản mới hơn của numpy có thể sử dụng các tệp nhị phân đó.

Thông báo lỗi trong câu hỏi là kết quả điển hình của sự không tương thích nhị phân.

Giải pháp là để có được phiên bản tương thích nhị phân, bằng cách cập nhật numpy lên ít nhất là phiên bản mà gấu trúc hoặc mô hình thống kê đã được biên dịch hoặc biên dịch lại gấu trúc và mô hình thống kê với phiên bản cũ hơn của numpy đã được cài đặt.

Phá vỡ khả năng tương thích ngược ABI:

Đôi khi các cải tiến hoặc tái cấu trúc trong numpy phá vỡ khả năng tương thích ngược của ABI. Điều này đã xảy ra (không cố ý) với numpy 1.4.0. Do đó, những người dùng đã cập nhật numpy lên 1.4.0, có sự không tương thích nhị phân với tất cả các gói đã biên dịch khác, được biên dịch dựa trên phiên bản trước của numpy. Điều này yêu cầu tất cả các gói có phần mở rộng nhị phân sử dụng numpy phải được biên dịch lại để hoạt động với phiên bản ABI không tương thích.


1
Tôi đã thử cập nhật numpy và gấu trúc và tôi vẫn gặp lỗi này, Có ý kiến ​​gì không?
NotSoShabby 23/12/18

37

Đối với tôi (Mac OS X Maverics, Python 2.7)

easy_install --upgrade numpy

đã giúp. Sau đó, bạn có thể cài đặt các gói cập nhật pandas , scikit-learning , v.v. bằng cách sử dụng pip :

pip install pandas

3
Tôi vừa thực thi "easy_install --upgrade numpy", nhưng không cài đặt các gói liên quan cập nhật như pandas andk scikit-learning. Mọi thứ đều ổn.
xjzhou

Làm việc cho tôi quá (Ubuntu 14.04, Python 2.7)
Henry Chinner

30

Tôi nhận thấy đây là một phiên bản đơn giản đã lỗi thời hoặc không khớp và đã được khắc phục bằng:

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

Hoặc có thể làm việc với một lớp lót:

pip install --upgrade numpy scipy pandas

Với những thay đổi el capitan trên OSX, tôi khuyên bạn nên sử dụng --user làm đối số bổ sung để ngăn pip ghi đè lên các tệp hệ thống. Nếu không, người dùng sẽ cảm thấy bị cám dỗ khi sử dụng sudo.
Roy Iacob,

@ Roy- Điều này phụ thuộc vào việc hệ thống python đang được sử dụng hay phiên bản brew afaik- sudo không cần thiết với brew python.
RexFuzzle

5

Tôi đã gặp lỗi tương tự với một thư viện khác và nhận ra rằng tôi đã cài đặt một số phiên bản numpy trên hệ thống của mình. Cách khắc phục đối với tôi là chỉnh sửa PYTHONPATH và đặt các gói trang web chứa phiên bản mới nhất của numpy ở vị trí đầu tiên.


2

Như ở đây , đối với tôi chỉ sudo pip install pandas==0.13.1làm việc


1

Tôi cũng gặp lỗi này khi sử dụng gấu trúc để truy cập MYSQL. Thông báo lỗi này cho biết sự cố tương thích nhị phân và có thể được giải quyết bằng cách sử dụng phiên bản pandas và gói numpy mới nhất. Đây là các bước của tôi để giải quyết vấn đề này và nó hoạt động tốt trên Ubuntu 12.04 của tôi:

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
Tôi đã làm điều này và đã nhận lỗi nàyFile "numpy/core/setup.py", line 654, in get_mathlib_info RuntimeError: Broken toolchain: cannot link a simple C program
Mona Jalal

1

Trong trường hợp của tôi, tôi đã cài đặt pandas-0.10.0.win-amd64-py2.7 nhưng đang kiểm tra xem lỗi đã được sửa trong phiên bản gấu trúc mới hơn chưa. Vì vậy, tôi đã thực hiện easy_install -U để buộc nâng cấp, nhưng sau đó gặp lỗi ở trên do một số điểm không tương thích với numpy, v.v. khi tôi làm

import pandas

Để khắc phục, tôi chỉ cần cài đặt lại tệp nhị phân pandas-0.10.0.win-amd64-py2.7 và mọi thứ đều hoạt động. Tôi không thấy câu trả lời này (gợi ý sử dụng pip) có thể đã giúp tôi (mặc dù không chắc chắn) Cài đặt phiên bản cụ thể với easy_install

Ngoài ra, điều này làm nổi bật lý do tại sao người ta nên sử dụng virtualenv (mà tôi thì không).


1

Đối với tôi (Mac OS X Mavericks), nó đã hoạt động để cài đặt phiên bản cho python2.6:

sudo port install py26-scikit-learn

sau đó chạy:

python2.6 myscript.py

1

Vấn đề tôi đã giải quyết trên Web hài lòng là thư viện cũ (1.5) xung đột với thư viện mới của tôi

pip cài đặt gấu trúc

cài đặt trong .virtualenv.

Vấn đề đã được giải quyết sau khi tôi thực hiện cài đặt pandas ra khỏi môi trường ảo. Ý tưởng đến từ cuộc thảo luận trên https://github.com/pydata/pandas/issues/3711 , cảm ơn cpcloud !


0

Tôi vừa gặp vấn đề 'ValueError' này và đã giải quyết nó. Chắc chắn có điều gì đó sai với gói numpy.

Nhưng khi thử pip install --upgrade numpykhông thành công, vì vậy tôi gỡ cài đặt và tải xuống numpy.ziptệp mới nhất . Sau đó, giải nén thủ côngpython setup.py install nó.

May mắn thay, nó hoạt động!


Nó cũng thất bại đối với tôi. Sau đó, tôi đã thử sudo pip install --upgrade numpyvà nó hoạt động.
Harsh Wardhan

0

Giống như @ user333700 đã nói, các phiên bản thư viện bắt buộc có thể không đáp ứng cho nhau. Bạn nhận được một thư viện như là sự phụ thuộc của một thư viện khác. Sau đó, mà không biết nó đã được cài đặt dưới dạng phụ thuộc, bạn cần thư viện cụ thể đó và bạn cài đặt một phiên bản. Với những cách như vậy, sự phụ thuộc có thể rối tung lên.

Tôi đã sống trong một trường hợp như vậy và tìm kiếm một giải pháp. Tìm thấy cái này: https://stackoverflow.com/a/12975518/1694344

Tôi đã có hai phiên bản khác nhau cho tệp thông tin trứng và tên thư mục của 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

Tôi đã gỡ bỏ tất cả chúng và cài đặt lại numpy bằng pip.


0

Tôi gặp sự cố tương tự và chỉ cần cài đặt lại bằng cách sử dụng pip install ... như được đề xuất trong các nhận xét trước đó không hoạt động.

Điều phù hợp với tôi là cài đặt lại với cờ được thêm vào pip install --no-cache-dir ..., có vẻ như có một phiên bản không tương thích ở đâu đó trong bộ nhớ cache.


-1

Có những trường hợp bạn muốn giữ một phiên bản NumPy cụ thể và tùy chọn nâng cấp được đề cập ở đây sẽ không hoạt động. Một ví dụ xảy ra với tôi là bản phân phối Python được cài đặt sẵn với ArcGIS. Để ArcPy hoạt động trong ArcGIS 10.5.1, bản phân phối đó cần phải là Python 2.7.12 với NumPy 1.9.3 và bất kỳ phiên bản nào khác của NumPy có thể sẽ gây ra sự cố với chức năng ArcPy của bạn.

Những gì bạn có thể làm với trường hợp này là cố gắng cài đặt một phiên bản cụ thể, cũ hơn của thư viện bên thứ ba có vấn đề được cho là tương thích với phiên bản NumPy cũ hơn mà ArcGIS có.

Ví dụ: scikit-learning 0.19.1 sẽ KHÔNG hoạt động với NumPy 1.9.3 và sẽ dẫn đến lỗi tương tự như bạn đã đề cập. Tuy nhiên, scikit-learning 0.15 hoạt động tốt. Bạn có thể thử nghiệm các phiên bản khác nhau để tìm phiên bản hoạt động. Chỉ cần đề cập đến số phiên bản thông qua pip:

python -m pip install scikit-learn==0.15
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.