lib python (question sur) [Réglé]
symbole manquant ?
Logiciels / Programmation

brunop Membre non connecté
-
- Voir le profil du membre brunop
- Inscrit le : 30/10/2011
- Groupes :
j'ai installé un logiciel (gurobi) qui a une interface python et lors de l'importation du module associé :
import gurobipy as gp
j'ai le message :
ImportError: /home/bruno/Enseignement/RO/gurobi1103/linux64/lib/python3.11/gurobipy/gurobipy.so: undefined symbol: PyVectorcall_Function
Bon d'habitude cette interface fonctionne (il faut renouveller une licence académique chaque année). Si j'ai bien compris cette fonction fait partie de l'API C de python (ici j'utilise python3.10), elle est d'ailleurs dans le .h correspondant (qui se trouve dans ) /usr/include/python3.10/cpython :
more abstract.h | grep PyVectorcall_Function
PyVectorcall_Function(PyObject *callable)
func = PyVectorcall_Function(callable);
#define _PyVectorcall_Function PyVectorcall_Function
Par contre quand je vais voir dans la bibliothèque : (/usr/lib64)
objdump -T libpython3.10.so | grep PyVectorcall
00000000001216f0 g DF .text 00000000000000d2 Base PyVectorcall_Call
J'ai ce symbole PyVectorcall_Call mais pas PyVectorcall_Function, que je ne trouve pas non plus
dans les autres .so relatives à python. Je précise que PyVectorcall_Call est dans le même .h que
PyVectorcall_Function, on s'attenderait à ce qu'elles soient toutes les deux dans la même .so.
C'est pas bizarre ? L'API C définit bien cette fonction.
Si ça dit qq chose à qq, un grand merci

BrunoP
brunop

Papoteur Membre non connecté
-
- Voir le profil du membre Papoteur
- Inscrit le : 03/10/2011
- Groupes :
-
Modérateur
-
Équipe Mageia
-
Administrateur
-
Forgeron
Ce qui me trouble, c'est que la lib gurobipy.so semble compilée pour le python 3.11. En général, le mélange de version de python ne fait pas de bons résultats.
Je dirais qu'il faudrait installer une autre version, celle qui contient cp310 dans le nom.
Une autre option est d'utiliser conda qui doit permettre d'avoir une autre version de Python, mais certainement moins confortable à l'utilisation que la solution précédente.
Yves

brunop Membre non connecté
-
- Voir le profil du membre brunop
- Inscrit le : 30/10/2011
- Groupes :
je ne trouve pas le symbole PyVectorcall_Function dans la libpython3.10.so. D'après la page de l'API C de python, cette fonction a été introduite dans la 3.8.
C'est qd même bizarre qu'elle soit décrite dan le .h et omise dans la lib.
Bruno
brunop

Papoteur Membre non connecté
-
- Voir le profil du membre Papoteur
- Inscrit le : 03/10/2011
- Groupes :
-
Modérateur
-
Équipe Mageia
-
Administrateur
-
Forgeron
brunop :Merci Yves, je testerai une version précédente mais gurobi1103 (la dernière version) est supposée être compatible avec python 3.8, 3.9, 3.10, 3.11, 3.12. Certes il y a ce répertoire "gurobi1103/linux64/lib/python3.11" dans lequel est leur interface python qui peut troubler... C'est quand même bizarre que
je ne trouve pas le symbole PyVectorcall_Function dans la libpython3.10.so. D'après la page de l'API C de python, cette fonction a été introduite dans la 3.8.
C'est qd même bizarre qu'elle soit décrite dan le .h et omise dans la lib.
Bruno
Certes, je n'ai pas d'explication de ce côté.
La question n'est pas de tester une version précédente, mais de choisir le paquet qui correspond au python 3.10 et non au 3.11.
https://pypi.org/project/gurobipy/#files
Tu as par exemple
gurobipy-11.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
qui doit mieux convenir. Ça reste la version 1103.
Yves

brunop Membre non connecté
-
- Voir le profil du membre brunop
- Inscrit le : 30/10/2011
- Groupes :
brunop

brunop Membre non connecté
-
- Voir le profil du membre brunop
- Inscrit le : 30/10/2011
- Groupes :
PS : Finalement pour les personnes qui veulent utiliser gurobi uniquement via python, elle peuvent donc (a priori j'ai pas testé puisque j'avais le serveur de licence...) :
1/ télécharger le bon gurobipy et l'installer comme il est mentionné ici. Je suppose qu'un pip install gurobipy fait aussi l'affaire. Là on a une version limitée (nb de variables et d'équations).
2/ Récupérer le serveur de licence ici.
3/ Demander une licence académique sur leur site et générer la clé (valable 1 an).
brunop
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie