Installation de la lib python3-ftdi1 avec pyenv

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?

Merci d’avance.

Je ne suis pas sur que ca ai un rapport avec pyenv du coup.

Tu installes comment la lib à présent ?

Je l’installe par la ligne

APT_PACKAGES="python3-ftdi1"

Du fichier install_apt.sh

j’ai déplacé ta question dans un sujet dédié


du coup t’as un log d’install?
est-ce que tu as vérifié manuellement si la lib est installée? dpkg -l | grep ftdi1

1 « J'aime »

Merci, j’aurai dû le faire :wink:

le résultat de la commande:

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?

Voici la liste des fichiers installés par la lib

/usr/lib/python3/dist-packages/_ftdi1.cpython-312-x86_64-linux-gnu.so
/usr/lib/python3/dist-packages/ftdi1.py
/usr/share/doc/python3-ftdi1/changelog.Debian.gz
/usr/share/doc/python3-ftdi1/changelog.gz
/usr/share/doc/python3-ftdi1/copyright

oui il est dans requirements.txt , je ne l’ai pas enlevé, il était installé par le premier développeur du plugin mais je ne pense pas qu’il serve

il ne retrouve pas du tout le module ftdi1

c’est quoi l’erreur?

et si tu lances python3 manuellement et que tu fais l’import (tapes manuellement la commande import xxx ca donne quoi?

l’erreur:

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é.

1 « J'aime »

euh… je fais ça comment? Je rajoute ça dans le fichier pyenv.lib?

c’est ce que j’ai cherché en premier :wink:

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 :wink:

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

Salut,

EDIT : sans garantie, car pas testé au préalable, je fais ca un peu à l’aveugle :wink:

Cela devrait fonctionner (non testé) en modifiant le fichier « pyenv.lib », à la ligne 171 et 174 :

Ligne 171 :

$pythonPath -m venv --upgrade-deps --system-site-packages ${VENV_DIR}

Ligne 174 :

$pythonPath -m venv --clear --upgrade-deps --system-site-packages ${VENV_DIR}

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 :

wget https://raw.githubusercontent.com/NebzHB/dependance.lib/master/pyenv.lib --no-cache -O ${BASE_DIR}/pyenv.lib &>/dev/null

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)

TiTidom.

oui en fait j’avais trouvé et j’ai fait cette modif.

j’ai fait ça aussi

j’ai toujours le pb et pourtant dans le fichier pyenv.cfg du répertoire venv j’ai bien la ligne à true pour include-system-site-packages

home = /opt/pyenv/versions/3.11.10/bin
include-system-site-packages = true
version = 3.11.10
executable = /opt/pyenv/versions/3.11.10/bin/python3.11
command = /opt/pyenv/versions/3.11.10/bin/python3 -m venv --system-site-packages --clear --upgrade-deps /var/www/html/plugins/teleinfo/resources/venv

Bonsoir,

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 !

TiTidom.

1 « J'aime »

Bien vu ça dit être la raison.
Faut utiliser une autre lib à installer sous pip, pyftdi convient pas?
Sinon tu as vraiment besoin de python3.11?

j’avais imaginé le même genre de réponse

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

là dans la dernière réponse il a fait comme moi…