167
votes

ValueError: la taille Numpy.NDARRAY modifiée peut indiquer l'incompatibilité binaire. Attendu 88 de C en tête, a obtenu 80 de PyObject

L'importation de pyxdameraulevenshtein donne l'erreur suivante, j'ai

__init__.pxd:242: in init pyxdameraulevenshtein
    ???
E   ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 88 from C header, got 80 from PyObject

qui est confronté à des problèmes similaires avec Python3.7 (3.7.9), Docker Image - Python: 3.7-buster / p>

pyxdameraulevenshtein==1.5.3, 
pandas==1.1.4 and 
scikit-learn==0.20.2. 
Numpy is 1.16.1. 
Works well in Python3.6, Issue in Python3.7.


0 commentaires

17 Réponses :


44
votes

Essayez avec numpy == 1.20.0 Cela a fonctionné ici, même si d'autres circonstances sont différentes (Python3.8 sur Alpine 3.12).


3 commentaires

Numpy == 1.20.1 est déjà sorti avec BugFixes :-)


J'ai les mêmes problèmes, résolus par la mise à niveau de Numpy à 1,20.3


Corrigé avec numpy == 1.20.3



0
votes

Pour presque la même image: Python: 3.7-SLIM-BUSTER

J'ai commencé à avoir ce problème aujourd'hui, il n'était pas extérieur avant.

Je l'ai résolu en supprimant Numpy des besoins. Fichier txt et faire à la place ce qui suit dans mon dockerfile:

RUN pip3 install --upgrade  --no-binary numpy==1.18.1 numpy==1.18.1 \
&& pip3 install -r requirements.txt 

J'utilise certaines anciennes versions de Keras et de ses bibliothèques et de la dradage de Numpy 1.20.0 ne fonctionnait pas pour ces bibliothèques . Mais je pense que la solution consiste dans la première commande que je vous ai donné que vous dites à Pip pour essayer de ne pas compiler Numpy et de télécharger une version pré-compilée.

L'astuce dans la commande est que vous pourriez trouver des gens qui racontent Vous utilisez - l'option non binaire de PIP pour résoudre le problème, mais ils ne spécifient pas comment et cela pourrait être délicat (comme cela m'est arrivé); Vous devez écrire le package deux fois dans la commande pour que cela fonctionne ou bien que PIP vous lancera une erreur.

Je pense que l'option - mise à niveau dans la première commande n'est pas nécessaire.


1 commentaires

Je n'ai pas fonctionné pour moi, mais la mise à niveau de 1,20.0 l'a fait, même si l'erreur que j'ai obtenue était dans le contexte du chargement d'une bibliothèque compilée contre une version antérieure de Numpy.



246
votes

Je suis dans Python 3.8.5. Cela semble trop simple pour être réel, mais j'ai eu le même problème et tout ce que j'ai fait, c'est de réinstaller Numpy. Fine.

pip uninstall numpy
pip install numpy

ou

pip install --upgrade numpy


10 commentaires

Hahaha ... je ne peux pas croire que cela a fonctionné pour moi aussi! Pour plus d'informations, je suis également dans Python 3.8.5. Il semble que j'avais à l'origine numpy-1.19.5 , puis après les étapes de désinstallation, j'ai obtenu numpy-1.20.1


J'ai dû faire Pip Installer - mettre à niveau Numpy pour le faire améliorer.


Classic, débranchez-le et branchez-le en solution. Fonctionne plus souvent que vous ne le pensez.


Idem ici - Désinstaller et l'installation a fonctionné pour moi (la cause profonde aurait pu être l'ANACONDA ENV sur AWS en utilisant la version 1.18.5 de Numpy)


Qu'en est-il si vous utilisez conda et non pip?


avait le même problème. Cette solution a fonctionné pour moi


Pourquoi la méthode "ou"?


Ouais, a travaillé pour moi aussi.


incroyable!! Merci.


La magie! A travaillé pour moi aussi!



18
votes

J'ai eu ce problème lors de l'utilisation de l'API d'objet TensorFlow. TensorFlow n'est actuellement pas compatible avec Numpy == 1,20 (bien que ce problème ne soit apparent que plus tard). Dans mon cas, le problème a été causé par des pycocotools. J'ai corrigé en installant une ancienne version.

pip install pycocotools==2.0.0


4 commentaires

Il a son propre problème - lors de l'installation, il supprime l'installation de cython existante, puis produit ModulenotFoundError: aucun module nommé 'Cython' '


Cela n'a pas supprimé Cython dans mon cas. Tout a bien fonctionné!


C'était aussi mon problème exact. Dans mon cas, j'ai bien fonctionné et n'a pas supprimé Cython.


Tu sais même ce que tu as fait, tu m'as juste aidé à résoudre un problème qui m'a bloqué pendant 3 jours



27
votes

En effet, (construire et) installation avec numpy> = 1.20.0 devrait fonctionner, comme indiqué, par exemple par ce Réponse ci-dessous . Cependant, je pensais que certains antécédents pourraient être intéressants - et fournir également des solutions alternatives.

il y avait un Changement dans l'API C Dans Numpy 1.20.0 . Dans certains cas, pip semble télécharger la dernière version de numpy pour l'étape de construction, mais le programme est exécuté avec la version installée de Numpy . Si la version de construction utilisée dans <1.20 , mais que la version installée est => 1.20 , cela conduira à une erreur.

(L'inverse de l'inverse ne devrait pas avoir d'importance, en raison de la compatibilité descendante. Mais si l'on utilise une version installée Numpy <1.20 , ils ne prévoyaient pas le changement à venir.)

Cela conduit à plusieurs façons possibles de résoudre le problème:

  • Mise à niveau (la version de construction) vers Numpy> = 1.20.0
  • Utilisez la version Numpy prise en charge de Minmum dans pyproject.toml ( Numpy le plus ancien )
  • Installer avec - sans binaire
  • Installer avec - No-Build-Isolation

Pour une discussion plus détaillée sur les solutions potentielles, voir https://github.com/scikit-learn-constrib/hdbscan / Problèmes / 457 # émetteur-773671043 .


3 commentaires

Si la version de construction utilisée dans <1,20, mais la version installée est => 1,20, cela conduira à une erreur. n'est-ce pas l'inverse? Vous construisez avec une version plus récente qui n'a pas la définition d'en-tête, puis l'exécutez avec une ancienne version qui s'attend à la définition d'en-tête. Ou est-ce que je manque quelque chose?


@Ivaylotoskov: Bien que cela ne semble pas intuitif, je pense qu'il est correct: la version de construction est responsable de la compilation. Les anciennes versions de construction ne pouvaient pas prévoir qu'il y aura un changement de Numpy, donc ce type de configuration crée un problème.


Après une vérification, je peux confirmer que c'est en effet l'inverse. Le changement dans l'API C est compatible en avant, car vous supprimez un en-tête. Si vous construisez avec une ancienne version qui a l'en-tête et l'exécute avec une version plus récente, elle ne se cassera pas. La séquence suivante produit l'erreur: pip install numpy == 1.21.0 , pip install pycocotools --no-binary pycocotools , pip install numpy == 1.19. 2 , python -c "Importer pycocotools.coco.coco" Ainsi, l'erreur se produit lorsque la version de build est > = 1.20 et que la version d'exécution est <1,20 .



4
votes

Pour quiconque utilise poésie Il est nécessaire d'avoir expérimental.new-installer code > Définir sur true pour une application avec une dépendance Numpy à construire correctement, c'est-à-dire:

poetry config experimental.new-installer true

Il est true true Par défaut mais si (comme c'était le cas pour moi), il a été modifié, il peut vous rattraper.

Mon application utilise TensorFlow et je n'avais donc pas la possibilité de mettre à niveau vers > 1.20 . La poésie ne prend pas non plus en charge - No-binary dépendances.


0 commentaires

3
votes

Après avoir installé un package, assurez-vous de redémarrer le noyau et devrait fonctionner. Habituellement, les packages sont mis à niveau automatiquement et tout ce dont vous avez besoin est un redémarrage rapide. Au moins, ce qui a fonctionné dans ma situation et j'obtenais la même erreur lorsque j'ai essayé d'installer et d'utiliser la grenade.


0 commentaires

5
votes

Ce qui a fonctionné pour moi, c'est:

pip uninstall numpy
conda install -y -c conda-forge numpy

Aussi bizzare que cela puisse paraître ... Je n'ai même pas eu à le désinstaller avec Conda qui me semblait étrange. J'utilise Python 3.9


0 commentaires

7
votes

Mise à niveau de la version Python vers Numpy == 1.21.1 a fonctionné pour moi!


1 commentaires

Yup pour les packages de mise à niveau ou de rétrogradation de l'incompatibilité binaire est utile.



1
votes

Utilisez des environnements virtuels Python et installez gensim en utilisant:

pip install gensim==3.8.3


0 commentaires

1
votes

Améliorer la version Numpy:

pip install -U numpy


0 commentaires

20
votes

Solution sans mettre à niveau Numpy

Lors de la mise à niveau de la version Numpy résoudrait souvent le problème, il n'est pas toujours viable. Un bon exemple est le cas lorsque vous utilisez tensorflow == 2.6.0 qui n'est pas compatible avec la dernière version Numpy (il nécessite ~ = 1.19. 2 ).

comme déjà mentionné dans Réponse de Fzeiser , il y a eu un changement dans API Numpy S C en version 1.20.0 . Il existe des packages qui reposent sur cette API C lorsqu'ils sont en cours de construction, par exemple pycocotools . Étant donné que PIP S Resolver de dépendance ne garantit aucune commande pour l'installation des packages, ce qui suit peut se produire:

  1. pip découvre qu'il doit installer numpy et il choisit la dernière version, 1.21.2 au moment de la rédaction de cette réponse .
  2. Il construit ensuite un package qui dépend de Numpy et de son API C, par ex. pycocotools . Ce package est désormais compatible avec Numpy 1.21.2 C API.
  3. à un point ultérieur PIP doit installer un package qui a une exigence pour une ancienne version de Numpy , par ex. tensorflow == 2.6.0 qui essaierait d'installer Numpy == 1.19.5 . En conséquence, numpy == 1.21.2 est désinstallé et l'ancienne version est installée.
  4. Lors de l'exécution du code qui utilise pycocotools , son installation actuelle s'appuie sur l'API Numpy C, mais la version Numpy a été rétrogradée, ce qui pourrait entraîner l'erreur.
  5. Solution

    Vous devez reconstruire le package avec l'utilisation de l'API CODAD Numpy C, par exemple pour pycocotools :

    pip uninstall pycocotools
    pip install pycocotools --no-binary pycocotools
    


3 commentaires

Je suis dans la situation que vous décrivez, cependant, lorsque vous utilisez des pycocotools 2.0.4, l'erreur a persisté après avoir utilisé cette méthode, mais si j'ai rétrogradé à la version 2.0.0 comme suggéré par @royce Schultz, le problème résolu. Quelle version de pycocotools où vous utilisez?


Je ne me souviens pas exactement, mais en regardant l'historique des versions et le moment de cette réponse, je pense que c'était 2.0.2 . Je ne peux pas reproduire le problème avec Python 3.8 pour une raison quelconque. Quel est votre environnement? Python, PIP et SETUTUToLS ?


J'utilise Python 3.8.10, PIP 21.3.1, je n'ai pas trouvé SetUtuptools ou Easy_Tools en utilisant PIP Freeze, mais lorsque j'ai exécuté 'Pip Installer SetUptools' Il a dit que V 58.5.2 a été installé



0
votes

Installez la version plus ancienne de Gensim, elle fonctionne!

conda install gensim==3.5.0

ou

pip install gensim==3.5.0


0 commentaires

4
votes

Numpy Version 1.22 l'a résolu pour moi.


0 commentaires

3
votes

J'étais confronté au même problème dans Raspberry Pi 3. En fait, l'erreur est avec pandas . Bien que TensorFlow ait besoin Numpy ~ = 1.19.2 , mais pandas n'est pas respectueux. Donc, j'ai mis à niveau (parce que la rétrogradation n'est pas) mon numpy vers la dernière version et tout fonctionne bien !!!!.

root@raspberrypi:/home/pi# python3
Python 3.7.3 (default, Jan 22 2021, 20:04:44) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np 
>>> np.__version__
'1.21.5'
>>> import pandas as pd
>>> pd.__version__
'1.3.5'
>>> import tensorflow as tf
>>> tf.__version__
'2.4.0'
>>> tf.keras.__version__
'2.4.0'
>>> tf.keras.layers
<module 'tensorflow.keras.layers' from '/usr/local/lib/python3.7/dist-packages/tensorflow/keras/layers/__init__.py'>

Le même problème ici aussi - https://github.com/bitsy-ai/tensorflow-arm-bin/ Problèmes / 5

Tensorflow Source: https: / /github.com/bitsy-ai/tensorflow-arm-bin


0 commentaires

2
votes

Cela a fonctionné pour moi (alors que rien d'autre sur cette page ne l'a fait):

# Create environment with conda or venv.
# Do *not* install any other packages here.
pip install numpy=1.21.5
# Install all other packages here.
# This works as a package may build against the currently installed version of numpy.

Cela a résolu un problème particulièrement brutal qui n'était pas résoluble par toutes les autres réponses sur cette page à partir de 2022-04- 11:

D'autres réponses essaient de résoudre le problème Après cela s'est produit, cela résout le problème avant cela se produit.

En outre, expérimentez différentes versions de Python, par ex. 3.8, 3.9, 3.10.

Référence: Excellente réponse de @fzeiser qui explique pourquoi cela fonctionne.


0 commentaires

1
votes

J'ai rencontré avec le même problème avec Python3.10.4, Numpy1.21.5, je l'ai résolu qu'après avoir mis à jour Numpy à 1.22.3 via PIP UNINSTALL NUmpy et PIP Install Numpy. Seule PIP Install - Upgrade Numpy n'a pas fonctionné.

ps d: \ quant \ vnpy-master \ Exemples \ veighna_trader> python. \ run.py Traceback (dernier appel dernier): fichier "D: \ quant \ vnpy-master \ Exemples \ veighna_trader \ run.py", ligne 31, dans du fichier vnpy_optionmaster importation magermasterapp "D: \ it_soft \ python3.10.4 \ lib \ site-packages \ vnpy_optionmaster__init __. Py", Ligne 26, en de. Engine Import OptionEngine, fichier app_name "D: \ it_soft \ python3.10.4 \ lib \ site-packages \ vnpy_optionmaster \ moteur.py", Ligne 34, en. TRICING IMPORT BINOMIAL_TREE_CYTHON AS Fichier binomial_tree "binomial_tree_cython.pyx", ligne 1, dans init Binomial_tree_cython ValueError: Numpy.NDARRAY SIZE CHANGÉ, MAIS indiquer l'incompatibilité binaire. Attendu 96 de la tête C, a obtenu 88 de PyObject


0 commentaires