PyEnv erreur sur Debian10 return code 127

Hello,

j’essaie de mettre en place l’installation des dépendances via ce que propose @Mips Dépendances python des plugins: venv, pyenv & debian 12 - #13 by Mips

sur un debian10 (je sais plus supporté, mais il y a encore pas mal d’utilisateurs dessus…) tout fraichement créé, j’obtiens l’erreur suivante :

======================================================================
== 28/08/2024 15:07:04 == Dependencies installation for mirobot
======================================================================
[  5% ] : Clean apt...
[  9% ] : Clean apt : [  OK  ]
[ 10% ] : Update apt...
[ 19% ] : Update apt : [  OK  ]
[ 20% ] : Init python3 & prerequisites...
[ 31% ] : Init python3 & prerequisites : [  OK  ]
[ 32% ] : Init pyEnv...
** PyEnv required: 3.7.3 < 3.8.2 **
[ 43% ] : Init pyEnv : [  OK  ]
[ 44% ] : install or update PyEnv...
[ 55% ] : install or update PyEnv : [  OK  ]
[ 56% ] : Install Python 3.8.2 with PyEnv...
** python3 path: /opt/pyenv/versions/3.8.2/bin/python3 **
[ 67% ] : Install Python 3.8.2 with PyEnv : [  OK  ]
[ 68% ] : Setting up virtual environment...
[ 99% ] : Setting up virtual environment :  ERROR 
[100% ] : Finished !
======================================================================
==KO== Installation Error
======================================================================
== ANALYSING ERRORS...
== NO KNOWN ERROR DETECTED
== Error in step : Setting up virtual environment
== Line 221
== Command `createVenv' have an issue
== Return code is 127
== Error message :
** use /opt/pyenv/versions/3.8.2/bin/python3 to setup /var/www/html/plugins/mirobot/resources/venv **
Python version in Venv needs update: 0.0.0!=3.8.2
usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear]
[--upgrade] [--without-pip] [--prompt PROMPT]
ENV_DIR [ENV_DIR ...]
venv: error: unrecognized arguments: --upgrade-deps
/var/www/html/plugins/mirobot/resources/pyenv.lib: line 165: /var/www/html/plugins/mirobot/resources/venv/bin/python3: No such file or directory
======================================================================

note : le répertoire venv n’est pas créé

c’est grave docteur ?

Salut,

Oui, j’aurais du préciser, je ne sais plus si c’était déjà là lors de la première version, mais l’argument --upgrade-deps requière python 3.9
c’est pour ca que si pas spécifié via TARGET_PYTHON_VERSION, c’est la 3.9 qui est installée au minimum
j’avais souvenir que si on demandait une version <3.9 alors il forçait en 3.9 mais manifestement c’est pas le cas :slight_smile:

donc concrètement:

  • passe en min 3.9 (ou ne spécifie rien) et ca va passer
  • je vais voir pour adapter le script pour qu’il n’installe jamais une version <3.9

ah moi j’avais compris que ca setté la version minimum désirée ?

TARGET_PYTHON_VERSION allow you to specify the minimal requested python version

et donc que le script prendrait n’importe quelle dernière version dispo pour la distrib à partir de celle-ci ?

→ mal compris donc ?

oui +/-

non, il prend une version qui match ta demande

exemple:

  • target 3.8.5, il t’installe la 3.8.5 (et donc build etc si pas encore installée, peut prendre 1h sur petite config)
  • target 3.8, il va te mettre à dispo n’importe quel version >=3.8.0 et <3.9.0; donc une 3.8.x
    ainsi
    • si un autre plugin a déjà exigé une 3.8.5, pas besoin de réinstaller (et de nouveau prendre 1h) une 3.8.18 (en admettant que c’est la dernière des 3.8, je n’ai pas vérifié)
    • si aucune version 3.8 dispo, il installe la dernière dispo (donc 3.8.18 dans cet exemple)

c’est important de garder la minor version car certaines versions de lib ne sont dispo qu’avec certaines minor: lib xxx est dispo en v1.2.4 sur python3.7 mais en 2.5.3 sur python3.11 et la v1.2.4 n’est plus dispo donc si après ton script requiere la 1.2.4 et que je t’ai installé un 3.11 tu vas pas être content :wink: (c’est un exemple réel que j’ai eu récemment)

donc si vmt c’est critique pour ton dev alors faut spécifier en target la version y compris avec le fix (3.8.5) sinon c’est mieux de target les minor afin d’optimiser le temps (et l’espace disque) global d’installation (car le script va essayer de rationaliser selon ce qui est déjà installé par les autres plugins)

1 « J'aime »

merci pour les précisions
c’est parfait.

en virant la contrainte, je confirme que c’est OK


j’en profite :
pas de soucis à ce que le venv créé soit owné par root !?

et donc tout ces exemples sont faux puisque si tu demandes une 3.8, ca crash :joy:

jamais eu et tout mes plugins utilises ce système.
le core reset les droits tous les jours de toute façon

nooon mais on a compris l’idée générale :slight_smile:

bon en fait en voulant ajouter le test sur la version 3.9 je me rend compte que le principe que je viens de décrire n’est pas respecté dans le cas où la version installée sur le système est déjà > la target.
Dans ce cas, il n’installe pas une autre version mais utilise la version système.
L’idée était en fait de ne pas faire de downgrade sur les minor en plus de à nouveau ne pas imposer un build long d’une version alors qu’à priori celle qui est là va tourner.

en gros si tu demandes une version 3.11 sur bullseye (ayant 3.9), ne pas installer une 3.12 car ta lib n’est peut-être pas encore compatible mais à l’inverse, si tu demandes une 3.9 sur bookworm et que donc 3.11 est dispo, c’est dommage de downgrade…

bref, ca fera l’objet d’une amélioration si un jour quelqu’un rencontre un blocage la dessus
c’est en théorie possible mais en pratique je n’ai jamais été bloqué par ça et j’ai qd même quelques plugins python donc même si pas statistiquement représentatif, je vais m’en contenter pour l’instant :slight_smile:

1 « J'aime »

le script test la version minimum à présent:

0000|======================================================================
0001|== 28/08/2024 17:00:19 == Dependencies installation for xxx
0002|======================================================================
0003|[  5% ] : Clean apt...
0004|[  9% ] : Clean apt : [  OK  ]
0005|[ 10% ] : Update apt...
0006|[ 19% ] : Update apt : [  OK  ]
0007|[ 20% ] : Init python3 & prerequisites...
0008|[ 99% ] : Init python3 & prerequisites :  ERROR 
0009|[100% ] : Finished !
0010|======================================================================
0011|== KO == Installation Error
0012|======================================================================
0013|== ANALYSING ERRORS...
0014|== NO KNOWN ERROR DETECTED
0015|== Error in step : Init python3 & prerequisites
0016|== Line 221
0017|== Command `testMinTargetPythonVersion' have an issue
0018|== Return code is 1
0019|== Error message :
0020|You cannot install a version of python lower than 3.9
0021|======================================================================
1 « J'aime »

Bonjour

Juste une question sur le principe en passant : si justement il faut une version antérieure de python à celle du système pour des raisons de version de lib (à la « c’était mieux avant »), comment forcer ? Je n’ai absolument pas le cas, mais on ne sais jamais.

A+
Michel

Ce n’est donc pas prévu. Je n’ai pas le cas non plus jusqu’ici.
Généralement les utilisateurs jeedom sont plutôt en retard sur les versions debian :sweat_smile:

Le jour où le besoin sera là et sera réel, on avisera le question. Par principe je ne développe pas quelque chose pour lequel il n’y a pas de besoin.

Surtout que cette situation n’est pas tenable en réalité, dans ce cas, le plugin devra de toute façon très vite être mis à jour pour être en ligne sur le nouvelle version de la lib.

1 « J'aime »

Non ? Pas possible ! :scream:

OK, c’était purement informatif. Merci de ta réponse (marrante).

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.