ValueError: numpy.ndarray size changed

kaggleのノートブックで、 cpprb を import しようとして発生。

ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 88 from C header, got 80 from PyObject

  • cpprb v9.4.4
  • numpy 1.18.5

Numpy 1.20.0 の リリースノート (長い。。。)

v1.19.5 と v1.20.0 の間のcommit (こっちも長い。。。)

どこかに、 ndarray の実装が変更されてるんじゃないかなぁ。。。


Size of np.ndarray and np.void_ changed
The size of the PyArrayObject and PyVoidScalarObject structures have
changed. The following header definition has been removed:

#define NPY_SIZEOF_PYARRAYOBJECT (sizeof(PyArrayObject_fields))
since the size must not be considered a compile time constant: it will
change for different runtime versions of NumPy.

The most likely relevant use are potential subclasses written in C which
will have to be recompiled and should be updated. Please see the
documentation for :cPyArrayObject{.interpreted-text role="type"} for
more details and contact the NumPy developers if you are affected by
this change.

NumPy will attempt to give a graceful error but a program expecting a
fixed structure size may have undefined behaviour and likely crash.


読めって書いてある PyArrayObject のドキュメントってどれのことだろう?


影響があるならってことだけど、 v1.12.0と一緒にコンパイルしたwheelを古い NumPyと使おうとしてみんなトラブっているから、みんな影響があるのでは?

とりあえず、しばらくは v1.19.5 以下のバージョンでコンパイルした wheel を配布すればよいのかな?


  • OK: NumPy 1.19.5 でコンパイル → NumPy 1.20.0 と一緒に使う
  • NG: NumPy 1.20.0 でコンパイル → NumPy 1.19.5 と一緒に使う

これなら、しばらくは v1.19.5 以下でビルドして配布しようかな。