Dépendances python des plugins: venv, pyenv & debian 12

je viens de tester également et j’ai fait une version 1.0.1 de jeedomtools (qui contient entre autre cette fonction)

Hello

Est ce que c est tjs important au niveau du plugin ?
Vu le commit fait en juillet, c est dorenavant de base pris en compte par le core (si on reste sur le nomage par défaut), isn’t it ?

Oui, sauf si le nom de ton dossier est différent comme tu dis

Bonjour à tous !

Je vous souhaite tout d’abord une très bonne année 2025 ainsi qu’à vos familles et vos amis.

En ce début d’année (j’essaye de prendre de bonne résolutions), je vais refaire tous mes plugins qui comporte un daemon python avec tout ce que vous avez mis à disposition. Je remercie particulièrement Mips pour tout ce qu’il à mis à disposition sur son compte github.
J’ai déjà fait quelques tests et tout est d’une simplicité déconcertante.

Je voulais juste savoir si je devais plutôt me focaliser sur le plugin « aiodemo » ou le plugin « kroomba ». Pour ma part, le plugin « kroomba » me semble plus complet car il comporte la partie daemon mais aussi la partie dépendances ainsi que l’utilisation du package « mips/jeedom-tools ».

Pour la dépendance de ce dernier package, tu la gères manuellement vu que le fichier packages.json n’existe plus ?

Encore grand merci pour tout ce que vous apportez à la communauté et pour votre aide !

Très bonne soirée

2 « J'aime »

Salut et bonne année à toi :blush:

Déjà merci pour ton retour :hugs:

kroomba ou un autre dont le repo est publique c’est comme tu veux

Aiodemo me semblait plus adapté pour apprendre car la « logique business » est très simple. Dans les autres on peut vite se perdre dans des détails de l’implémentation du plugin et du coup perdre le focus sur la partie « core »
C’est vrai qu’il utilise packages.json du core; quelque part ca montre qu’on peut combiner les options comme on veut, mais je peux le mettre à jour pour qu’il utilise la lib pyenv.

Oui mais plus pour très longtemps :wink:

Mon objectif est de pouvoir mettre le dossier vendor dans le .gitignore et de n’avoir que mon composer.json et composer.lock dans le repo et déployé avec le plugin => ainsi dependabot peut mettre à jour les dépendances correspondantes tout seul (il met à jour le .lock; le .json étant fixé durant le dev pour être sur de la compatibilité du moins si tout le monde respecte les règle de versioning major.minor.fix)

Pour cela il fallait pouvoir lancer composer i (et surtout pas composer u car risque de breaking change) au moment du téléchargement et cela sera possible en 4.5: Plugin post installation hook

Ce point mériterait un sujet dédié, je me note un rappel pour détailler plus.

A noter que si les dépendances sont installées via le core avec le fichier packages.json, il est déjà possible de faire installer des dépendances composer; l’inconvénient selon moi c’est

  • l’impossibilité de brancher un dependabot dessus et
  • que le core fait lui même le composer u et donc risque de breaking change
1 « J'aime »

Bonjour,

Je test cette méthode mais elle ne me fournis pas le service attendu.
JE voudrais installer un environnement dédié en python 3.9 :
voici mon fichier install_apt.sh :

######################### INCLUSION LIB ##########################
BASE_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
wget https://raw.githubusercontent.com/NebzHB/dependance.lib/master/dependance.lib --no-cache -O ${BASE_DIR}/dependance.lib &>/dev/null
PLUGIN=$(basename "$(realpath ${BASE_DIR}/..)")
LANG_DEP=fr
. ${BASE_DIR}/dependance.lib
##################################################################
wget https://raw.githubusercontent.com/NebzHB/dependance.lib/master/pyenv.lib --no-cache -O ${BASE_DIR}/pyenv.lib &>/dev/null
. ${BASE_DIR}/pyenv.lib 
TARGET_PYTHON_VERSION="3.9"
VENV_DIR=${BASE_DIR}/python_venv
#APT_PACKAGES="python3 python3-venv python3-pip python3-dev libffi-dev libssl-dev build-essential libxml2-dev libxslt1-dev zlib1g-dev"
##################################################################

pre

step 5 "Clean apt"
try apt-get clean

step 10 "Update apt"
try apt-get update

step 15 "Purge dynamic contents"
silent rm -rf ${BASE_DIR}/python_venv
silent rm -rf ${BASE_DIR}/ProJoted/__pycache__

launchInstall
#createVenv
#autoSetupVenv
 

step 70 "Install required python3 libraries in venv"
try ${VENV_DIR}/bin/python3 -m pip install --upgrade -r ${BASE_DIR}/python-requirements/requirements.txt

step 80 "Restoring folders and files rights"
chown -Rh www-data:www-data ${VENV_DIR}

step 85 "Summary of installed packages"
${VENV_DIR}/bin/python3 -m pip freeze

post

comment pourrait-on apporter de l’aide sans que tu expliques ce que tu as essayé de faire dans ce script et sans fournir le moindre log?

Pourquoi avoir ajouté plein de choses dans le script pour finalement appeler la fonction préconisée qui se charge de tout?

Je t’invite à relire la documentation et le premier post de ce sujet.

d’installer dans le Bonjour,
Merci pour ton retour qui est « C’est pas faux » selon l’expression consacré.

J’ai pas compris la documentation et j’ai cherché l’inspiration dans d’autre plugin.

Mon vrai probléme est que lorsque je lance « launchInstall », je voudrais avior un python 3.9 dans le dossier « python_venv » de ressource du plugin.
Le but est d’avoir un environnement dédié au plugin sans interation avec les autres.

D’après la doc de dependance.lib, il te faut un fichier install_apt.sh qui ressemble tout simplement à ça :

######################### INCLUSION LIB ##########################
BASE_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
wget https://raw.githubusercontent.com/NebzHB/dependance.lib/master/dependance.lib --no-cache -O ${BASE_DIR}/dependance.lib &>/dev/null
PLUGIN=$(basename "$(realpath ${BASE_DIR}/..)")
LANG_DEP=en
. ${BASE_DIR}/dependance.lib
##################################################################
wget https://raw.githubusercontent.com/NebzHB/dependance.lib/master/pyenv.lib --no-cache -O ${BASE_DIR}/pyenv.lib &>/dev/null
. ${BASE_DIR}/pyenv.lib
##################################################################

TARGET_PYTHON_VERSION="3.9"
VENV_DIR=${BASE_DIR}/python_venv
# APT_PACKAGES="first1 second2"

launchInstall

Et tout ce dont tu as besoin sera fait, mais tu dois déplacer le fichier ${BASE_DIR}/python-requirements/requirements.txt vers ${BASE_DIR}/requirements.txt
→ Merci Mips et Nebz

2 points me taraudent :

  • pourquoi une vieille version de python ?
  • pourquoi python_venv ? Tu utilises des venv avec un autre interpréteur que python ? Par défaut c’est juste venv, pourquoi ça ne convient pas ?

Attention un détail: la version n’est jamais garantie, seule la version minimale est garantie.

Donc si tu demandes une 3.9 mais que la personne est sur deb12, alors ca sera 3.11 (et jusqu’à preuve du contraire ca fonctionnera très bien)

La version minimum « absolue » installée par ce script est déjà 3.9 donc en fait ca ne sert à rien de le préciser, c’est déjà le cas (mais ca n’est pas un problème non plus)

Cette phrase m’interpelle…
C’est une limitation de la bibliothèque pyenv.lib ?
J’ai déjà installé une version de python inférieure à celle du système sous Debian 11 pour des tests et ça a fonctionné sans problème. C’est différent sous Debian 12 ?

NB: désolé du hors sujet, je ne peux pas t’envoyer de MP.

1 « J'aime »

J’utilise un API WRAPPER qui est validé en python 3.9.
Et j’aimerais avoir un environnement python dédié au plugin avec des packages qui lui est propres.

Je suis preneur de ton code où on installe une version de python dédié avec ces packages.

C’est le code qui est dans la doc et adapté pour ton cas

Je pense qu’il faut arrêter de chercher des problèmes où il y en a pas.
Prends l’exemple de base et ne change rien. Ca fonctionnera. N’essaies pas de faire autre chose.

Il faut commencer par les bases (marcher) avant de vouloir aller plus loin (courir)

J’ai fais plusieur test avant de solliciter le forum. Mais jamais j’ai un python3 qui c’est retrouvé dans le dossier venv ou python venv.

Malheureusement aprés une demi journée de test non concluant, j’ai jamais réussi à avoir le python3 dans le dossier Bin tel que attendu.
J’ai donc remis en cause ma conpréhension du pyenv. Et j’ai demandé de l’aide pour comprendre si j’étais dans l’erreur.

c’est peut etre le moment de créer un post dédié aux « problemes perso », plutôt que polluer celui qui sert de base plus de « tuto »

3 « J'aime »

Dans ce post dédié, ne pas hésiter à fournir script écrit et log correspondant comme déjà demandé; sans ça impossible d’aider.

Juste demander « de l’aide parce que ca ne fonctionne pas » ne nous permet pas d’aider.
Pas besoin non plus de redemander un script exemple, c’est celui de la doc qu’il faut prendre.

Un lien vers un repo dans lequel le code se trouve est un plus si c’est publique.

C’est évident pour moi mais je vais préciser quand même: as-tu lancer l’installation de tes dépendances sur ton plugin? Sans action (clic sur le bouton) rien ne se fera.

Je pense que ce qu’il veut dire, c’est qu’il veut bloquer la version de Python en 3.9 quelle que soit la version de Debian.

Pour utiliser ensuite l’API WRAPPER.

Mais il faudrait peut-être demander à l’auteur de l’API WRAPPER qu’elle soit compatible avec Python 3.11, car quand jeedom passera en Debian 12 par défaut, il me semble que ce sera Python 3.11.

Bonjour à tous,

Je travaille sur un nouveau plugin et j’ai implémenté les routines pour l’installation des dépendances et en particulier l’environnement virtuel Python.
Environnement Debian 12 & Jeedom 4.5 (voir page santé ci-dessous).

Dans mes plugins, par choix, je gère la gestion des dépendances à partir du répertoire:

html/plugins/MyPlugin/core/python/dependencymanagement/install_apt.sh
html/plugins/MyPlugin/core/python/dependencymanagement/requirements.txt

Et je place mon environnement virtuel dans:

html/plugins/MyPlugin/py_venv

J’y ai passé toute ma soirée et analyser les différents code pour un résultat imuablement …
le lancement de l’installation des dépendances installe le venv Python à:

html/plugins/MyPlugin/resources/python_venv

???

Ce chemin semble gravé dans le dur quelque part (je n’ai pas trouvé ou ?) ou il y a quelque chose qui m’échappe et que je ne fais pas bien ?

Merci d’avance de vos retours.

Script install_apt.sh

# --------------------- Inclusion LIB 1 & 2 ----------------------
BASE_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
wget https://raw.githubusercontent.com/Mips2648/dependance.lib/master/dependance.lib --no-cache -O ${BASE_DIR}/dependance.lib &>/dev/null
PLUGIN=$(basename "$(realpath ${BASE_DIR}/../../..)")
LANG_DEP=en
. ${BASE_DIR}/dependance.lib

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

# --------------------------- Options ----------------------------
TARGET_PYTHON_VERSION="3.11"
VENV_DIR=${BASE_DIR}/../../../py_venv
APT_PACKAGES=""

launchInstall

exit

Page Santé