web-dev-qa-db-fra.com

la taille de numpy.ufunc est incorrecte. Essayez de recompiler. même avec les dernières versions de pandas et numpy

J'utilise des pandas dans un conteneur et j'obtiens l'erreur suivante:

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

J'ai lu sur autres réponses que ce message apparaît lorsque les pandas sont compilés avec une version numpy plus récente que celle que vous avez installée. Mais mettre à jour les deux pandas et Numpy n'a pas fonctionné pour moi. J'ai essayé de savoir si j'ai quelques versions de numpy, mais pip show numpy semble afficher la dernière version. 

De plus, cela ne se produit que très rarement lorsque je déploie localement et non sur le serveur. 

Des idées comment y remédier? Ou au moins comment déboguer mes versions de numpy et pandas (s'il y a plusieurs versions, comment puis-je vérifier cela)

J'ai essayé: mettre à jour les deux paquets, puis les supprimer et les réinstaller. Aucune aide là-bas.

7
NotSoShabby

La réponse était que fastparquet (un paquet utilisé par les pandas) utilisait un fichier binaire numpy plus ancien pour une raison quelconque. La mise à jour de ce paquet a aidé. Je suppose que si quelqu'un d'autre résout ce problème, essayer de mettre à jour tous les paquets associés (qui utilisent numpy) sera la bonne solution

4
NotSoShabby

TLDR: Si docker Ajouter:

RUN pip install numpy

avant vous installez des pandas (probablement juste votre pip install -r requis.txt) et cela fonctionnera à nouveau.

Je fais cela dans les pandas qui construisent des dockers dans Alpine et je rencontre le même problème et cela vient JUSTE apparaître (le 27 décembre 2018) pour une construction qui fonctionnait très bien auparavant.

4
voglster

Assurez-vous que la bonne version de numpy est installée sur /volumes/dependencies/site-packages/ et que vous l’utilisez.

0
yann

J'ai eu le même problème et j'ai essayé toutes les réponses ci-dessus (au moment de la rédaction). La seule chose qui a fonctionné pour moi a été de passer à pyarrow

Je me suis ensuite assuré de spécifier le moteur pyarrow lors de l'utilisation de parquet dans des pandas. Bien que les pandas devraient utiliser par défaut le moteur pyarrow avant fastparquet selon la documentation. 

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