Attention à ce qu’ils soient encore compatibles… Je n’ai pas du tout vérifié ce point. Tu auras peut-être des adaptations à faire.
Oui c’est prévu de les débugger. Pour le moment je les teste dans les deux versions de python (avec et sans venv) pour comparer.
Je viens de tester l’appel de script direct : /opt/pyenv/versions/3.11.11/bin/python3 moveX.PY 10
et ça me retourne cette erreur (je suis bien en 3.11.11 d’après ce qu’on a fait ensemble) :
0031|[2025-03-20 18:45:36] ERROR : Erreur exécution de la commande [Aucun][tapo venv][moveX] : Erreur sur sudo chmod +x /opt/pyenv/versions/3.11.11/bin/python3 2>/dev/null;/opt/pyenv/versions/3.11.11/bin/python3 moveX.PY 10 2>&1 valeur retournée : 2. Détails : /opt/pyenv/versions/3.11.11/bin/python3: can't open file '/var/www/html/core/ajax/moveX.PY': [Errno 2] No such file or directory
J’ai suivi ce que tu m’as expliqué : un fichier info.py dans le répertoire data (le même endroit que mon script moveX.py), la ligne from .info Import Info
mais j’ai cette erreur :
Erreur exécution de la commande [Aucun][tapo][moveX] : Erreur sur sudo chmod +x /var/www/html/plugins/script/data/moveX.PY 2>/dev/null;/var/www/html/plugins/script/data/moveX.PY -25 2>&1 valeur retournée : 1. Détails : Traceback (most recent call last): File "/var/www/html/plugins/script/data/moveX.PY", line 6, in from .info import Info ImportError: attempted relative import with no known parent package
Il faudrait mettre le chemin absolu vers le script
Essaie sans le point alors.
Je ne sais pas retrouver le chemin absolu
Et pour l’appel de la class sans le point :
Erreur exécution de la commande [Aucun][tapo][moveX] : Erreur sur sudo chmod +x /var/www/html/plugins/script/data/moveX.PY 2>/dev/null;/var/www/html/plugins/script/data/moveX.PY 10 2>&1 valeur retournée : 1. Détails : Traceback (most recent call last): File "/var/www/html/plugins/script/data/moveX.PY", line 6, in from info.py import Info ModuleNotFoundError: No module named 'info.py'; 'info' is not a package
/var/www/html/plugins/script/data/moveX.PY
est le chemin absolu
Remets le point et crée un fichier __init__.py
vide dans le répertoire.
Pour l’appel du script je suis pas sûr de comprendre, tu me disais que je pouvais appeler directement le script pour qu’il se lance dans le venv en lançant
/opt/pyenv/versions/3.11.10/bin/python3 ton_script.py
Et là tu me dis d’utiliser plutôt
var/www/html/plugins/script/data/moveX.PY
mais ça c’est ce que j’utilise dans le script .sh après avoir activé le venv. Du coup je suis perdu
Et ensuite pour l’appel de la class j’ai ajouté le fichier vide et remis le point mais j’ai toujours l’erreur:
Erreur exécution de la commande [Aucun][tapo][moveX] : Erreur sur sudo chmod +x /var/www/html/plugins/script/data/moveX.PY 2>/dev/null;/var/www/html/plugins/script/data/moveX.PY 10 2>&1 valeur retournée : 1. Détails : Traceback (most recent call last): File "/var/www/html/plugins/script/data/moveX.PY", line 6, in from .info.py import Info ImportError: attempted relative import with no known parent package
Bon moi aussi j’ai un peu perdu le fil de mes explications, je reprends calmement.
1. Interpréteur et chemin vers le script
Soit tu actives le venv et tu lances le script sous la forme :
/var/www/html/plugins/script/data/pytapo_venv/bin/activate
# puis ...
moveX.PY
# ou
/var/www/html/plugins/script/data/moveX.PY
Soit tu n’actives pas le venv et lances le script avec l’interpréteur python3 du répertoire du venv sous la forme :
/var/www/html/plugins/script/data/pytapo_venv/bin/python3 moveX.PY
# ou
/var/www/html/plugins/script/data/pytapo_venv/bin/python3 /var/www/html/plugins/script/data/moveX.PY
Le chemin absolu ou relatif, c’est en fonction de là où « tu te trouves ».
Les 2 manières ont le même résultat.
2. Import de la classe qui contient les variables
Je n’ai pas écrit ceci : from .info.py import Info
mais ceci :
from info import Info
# ou ceci :
from .info import Info
Il ne doit pas y avoir l’extension du fichier (.py) dans le nom du module.
Je te remerci pour ta patience infinie, ça fonctionne enfin avec les deux syntaxes d’appel du script , et uniquement avec celle-ci pour la classe:
from info import Info
Nickel !
Tu peux donc marquer ma dernière réponse comme solution pour cloturer le fil
Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.