Bonsoir à tous, j’ai un petit souci que je n’arrive pas à résoudre. Avant l’utilisation de pyenv pour le plugin teleinfo j’installais la lib ftdi1 via la commande:
apt-get install -y python3-ftdi1
Avec pyenv python ne trouve plus le module ftdi1, est ce que vous savez comme faire svp?
ii libftdi1-2:amd64 1.5-5+b1 amd64 C Library to control and program the FTDI USB controllers
ii python3-ftdi1 1.5-5+b1 amd64 Python module to control and program the FTDI USB controllers
Et le log:
======================================================================
== 02/10/2024 14:04:40 == Installation des dépendances de teleinfo
======================================================================
[ 5% ] : Nettoyage APT...
[ 9% ] : Nettoyage APT : [ OK ]
[ 10% ] : Mise à jour APT...
[ 14% ] : Mise à jour APT : [ OK ]
[ 15% ] : Installation des paquets APT...
[ 19% ] : Installation des paquets APT : [ OK ]
[ 20% ] : Initialisation de python3 et des prérequis...
[ 29% ] : Initialisation de python3 et des prérequis : [ OK ]
[ 30% ] : Initialisation de PyEnv...
** PyEnv required: 3.9.2 < 3.11 **
[ 39% ] : Initialisation de PyEnv : [ OK ]
[ 40% ] : Installation ou Mise à jour de PyEnv...
[ 49% ] : Installation ou Mise à jour de PyEnv : [ OK ]
[ 50% ] : Install Python 3.11 avec PyEnv...
** Chemin de python3: /opt/pyenv/versions/3.11.10/bin/python3 **
[ 59% ] : Install Python 3.11 avec PyEnv : [ OK ]
[ 60% ] : Configuration de l'environnement virtuel...
** Version de Python dans le Venv: Python 3.11.10
[ 69% ] : Configuration de l'environnement virtuel : [ OK ]
[ 70% ] : Installation des paquets python nécessaires...
[ 79% ] : Installation des paquets python nécessaires : [ OK ]
[ 80% ] : Rétablissement des droits des dossiers et fichiers...
[ 89% ] : Rétablissement des droits des dossiers et fichiers : [ OK ]
[ 90% ] : Résumé des paquets installés...
certifi==2024.8.30
charset-normalizer==3.3.2
idna==3.10
paho-mqtt==1.6.1
pylibftdi==0.22.0
pyserial==3.5
pyudev==0.24.3
requests==2.32.3
six==1.16.0
urllib3==2.2.3
[ 99% ] : Résumé des paquets installés : [ OK ]
[100% ] : Terminé !
======================================================================
==OK== Installation Réussie
======================================================================
Si je comprends bien la commande apt … install cette lib dans python3 du système. Il faudrait qu’elle l’installe dans le python du pyenv. C’est ça?
lorsque tu installes un paquet « python » via apt (quand il existe) alors il est installé globalement et tout le monde peut en bénéficier (même depuis un venv), ca devient juste un paquet système disponible.
je vois que tu as aussi installé pylibftdi, tu l’as dans ton requierements.txt ?
là du coup il est aussi dans ton venv; mais c’est p-e pas la même version de lib et donc c’est p-e ca ton problème? il ne retrouve pas les bons modules dans la packages?
Traceback (most recent call last):
File "/var/www/html/plugins/teleinfo/resources/teleinfo_2_cpt.py", line 55, in <module>
import ftdi
ModuleNotFoundError: No module named 'ftdi'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/var/www/html/plugins/teleinfo/resources/teleinfo_2_cpt.py", line 58, in <module>
import ftdi1 as ftdi
ModuleNotFoundError: No module named 'ftdi1'
ftdi c’est pour python 2 et une exception est normalement gérée pour ensuite charger le module ftdi1 et c’est cette erreur qui génère ces traces.
là je n’ai pas de message d’erreur mais si je lance par le python du pyenv en 3.11:
jeedom@jeedom:/var/www/html/plugins/teleinfo/resources/venv/bin$ python3
Python 3.9.2 (default, Feb 28 2021, 17:03:44)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import ftdi1
>>>
jeedom@jeedom:/var/www/html/plugins/teleinfo/resources/venv/bin$ /var/www/html/plugins/teleinfo/resources/venv/bin/python3.11
Python 3.11.10 (main, Sep 9 2024, 13:42:27) [GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import ftdi1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'ftdi1'
>>>
en fait il semble que le system site packages soit pas actif par défaut, c’est pour ca que tu n’aurais pas accès au paquet installé via apt,
tu peux tester de créer manuellement ton environnment avec le flag --system-site-packages et voir si ca passe?
sinon il n’y aurait pas une alternative pip à ton paquet ftdi1 que tu installes via apt? ainsi tu l’installes dans ton venv et c’est réglé.
par contre j’ai bien trouvé les fichiers ftdi1.py et _ftdi1.py qui une fois mis dans le même répertoire que le fichier python tout fonctionne mais je voudrait pas trop faire ça en mode bourrin… même si c’est souvent comme ça que je fais
Je me dis aussi qu’il y aura peut être pour un autre plugin le même problème sur une autre lib et il serait sans doute bien de trouver une solution globale
Mais le soucis, c’est que dans le fichier de ton plugin « install_apt.sh », tu dois avoir le téléchargement de la lib en début de fichier et donc cela va écraser tes modifs…
Je parle de cette ligne dans ton fichier install_apt.sh :
Il faudrait donc la mettre en commentaire, ensuite virer le répertoire « venv » existant (pour qu’il le recrée), et relancer les dépendances, et là ca devrait fonctionner comme attendu…
EDIT2 : @Mips : à voir si cela se reproduit, s’il ne faudrait pas ajouter une option au lancement du type « include-system-packages » (de type 1 ou 0), comme ca les dev auraient le choix de les inclure ou non (non inclus par défaut)
A y repenser, c’est probablement logique : le system-packages sur lequel pointe le venv, ce c’est pas vraiment le python du système mais celui de pyenv…
Et le package installé par apt lui pointe vers le python de l’os… Donc personne ne se voit dans cette histoire…
Et là comme ça, je n’ai pas d’autre idées. Sur les forums, certains parlent d’ajouter un lien symbolique du répertoire contenant les fichiers python souhaités vers le répertoire des packages du venv (un peu l’équivalent de ce que tu as fait en copiant à la main les fichiers), mais sachant qu’on parle ici de packages qui sont pour des versions différentes de python, j’ai un doute sur la propreté de la chose !
ce serait possible mais il faut re écrire toutes les interaction avec le modem et je n’en ai pas un sous la main pour tester
pas spécifiquement mais le fonctionnement avec pyenv me semble plus simple qu’avec un venv où tu dois prévoir tous les cas en fonction de la version de python installé sur la machine. Donc même si tu mets pyenv avec python 3.9 le problème de la lib serait le même je pense
Non y a rien à prévoir.
Pyenv c’est juste pour installer une autre version de python après le venv est créé pareil.
Il ne faut pas forcer une version de python si le plugin n’en a pas besoin. Donc si le plugin tourne avec 3.9, ne spécifie rien. Ca utilisera la version système et du coup le flag « system package » devrait fonctionner