it-roy-ru.com

numpy.ufunc имеет неправильный размер, попробуйте перекомпилировать. даже с последними pandas и ​​numpy версиями

Я использую pandas в контейнере, и я получаю следующую ошибку:

Traceback (most recent call last):
  File "/volumes/dependencies/site-packages/celery/app/trace.py", line 374, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/volumes/dependencies/site-packages/celery/app/trace.py", line 629, in __protected_call__
    return self.run(*args, **kwargs)
  File "/volumes/code/autoai/celery/data_template/api.py", line 16, in run_data_template_task
    data_template.run(data_bundle, columns=columns)
  File "/volumes/code/autoai/models/data_template.py", line 504, in run
    self.to_parquet(data_bundle, columns=columns)
  File "/volumes/code/autoai/models/data_template.py", line 162, in to_parquet
    }, parquet_path=data_file.path, directory="", dataset=self)
  File "/volumes/code/autoai/core/datasets/parquet_converter.py", line 46, in convert
    file_system.write_dataframe(parquet_path, chunk, directory, append=append)
  File "/volumes/code/autoai/core/file_systems.py", line 76, in write_dataframe
    append=append)
  File "/volumes/dependencies/site-packages/pandas/core/frame.py", line 1945, in to_parquet
    compression=compression, **kwargs)
  File "/volumes/dependencies/site-packages/pandas/io/parquet.py", line 256, in to_parquet
    impl = get_engine(engine)
  File "/volumes/dependencies/site-packages/pandas/io/parquet.py", line 40, in get_engine
    return FastParquetImpl()
  File "/volumes/dependencies/site-packages/pandas/io/parquet.py", line 180, in __init__
    import fastparquet
  File "/volumes/dependencies/site-packages/fastparquet/__init__.py", line 8, in <module>
    from .core import read_thrift
  File "/volumes/dependencies/site-packages/fastparquet/core.py", line 13, in <module>
    from . import encoding
  File "/volumes/dependencies/site-packages/fastparquet/encoding.py", line 11, in <module>
    from .speedups import unpack_byte_array
  File "__init__.pxd", line 861, in init fastparquet.speedups
ValueError: numpy.ufunc has the wrong size, try recompiling. Expected 192, got 216

Я прочитал другие ответы , что это сообщение появляется, когда pandas скомпилировано с более новой версией numpy, чем та, которую вы установили. Но обновление pandas и ​​numpy у меня не сработало. Я попытался выяснить, есть ли у меня несколько версий numpy, но pip show numpy, похоже, показывает последнюю версию.

Кроме того, странным образом это происходит только тогда, когда я развертываюсь локально, а не на сервере.

Есть идеи, как это исправить? Или, по крайней мере, как отладить мою версию numpy и pandas (если есть несколько версий, как это проверить)

Я пытался: обновить оба пакета и удалить и переустановить их. Там нет никакой помощи.

7
NotSoShabby

Ответ был таков: fastparquet (пакет, который используется пандами) по какой-то причине использовал старый бинарный файл. Обновление этого пакета помогло. Я предполагаю, что если кто-то еще столкнется с этой проблемой, попытаться обновить все связанные пакеты (которые используют numpy) будет правильным способом

4
NotSoShabby

TLDR: Если докер Добавить:

RUN pip install numpy

до вы устанавливаете pandas (вероятно, просто ваш pip install -r needs.txt) и он просто снова заработает.

Я делаю это в сборке панкеров в Alpine и сталкиваюсь с той же проблемой, и она ПРОСТО выскочила (27 декабря 2018 г.) для сборки, которая раньше работала просто отлично.

4
voglster

Убедитесь, что на /volumes/dependencies/site-packages/ установлена ​​правильная версия numpy, и вы ее используете.

0
yann

У меня возникла та же проблема, и я попробовал все приведенные выше ответы (на момент написания). Единственное, что сработало для меня, это переключение на pyarrow

Затем я убедился, что при использовании паркета в пандах был указан движок pyarrow. Хотя pandas должен по умолчанию использовать движок pyarrow перед fastparquet в соответствии с документами. 

pd.read_parquet('./path', engine='pyarrow')
0
gavinest