Problème importation module python

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
cortexlegeni
Messages : 2
Inscription : 07 nov. 2018, 21:36

Problème importation module python

Message par cortexlegeni »

Bonjour,

J'ai fais quelques recherches sur le forum mais je n'ai point trouver la réponse à me question ou tout du moins un problème similaire.
Je cherche à pouvoir couper de façon automatique le wifi de mes différents point d'accès la nuit et lorsque je ne suis pas à la maison dans le but à la fois d'éviter les ondes à mes enfants mais aussi de limiter les possibilités de piratage en mon absence.
Je suis donc en train de tester à l'aide d'un dummy switch auquel j'ai rattaché un script seulement j'ai besoin d'utiliser le module paramiko pour accéder au point d'accès en SSH et pas moyen de faire reconnaître ce dernier de façon convenable.

AU départ, j'avais effectué des test en direct et mon script passait bien quand je le lançais à la main en ligne de commande, mais rien à faire dans domoticz. J'ai compris que le problème venait au départ de l'installation des modules qui étaient fait sous python 2.7 et non pas python3.

J'ai donc installé paramiko sous python3, et cela fonctionne donc quand je lance mon script via : sudo python3 mon-script.py, idem via sudo python3.5 mon-script.py et pourtant j'ai toujours ces erreurs dans le log :

Code : Tout sélectionner

2018-11-07 21:48:44.306 Error: EventSystem: Failed to execute python event script "/home/adm-ser/domoticz/scripts/python/ocript_device_Wifi-tes.py"
2018-11-07 21:48:44.306 Error: EventSystem: Traceback (most recent call last):
2018-11-07 21:48:44.306 Error: EventSystem: File "/home/adm-ser/domoticz/scripts/python/ocript_device_Wifi-tes.py", line 3, in <module>
2018-11-07 21:48:44.306 Error: EventSystem: import sys, paramiko
2018-11-07 21:48:44.306 Error: EventSystem: File "/usr/lib/python3.5/paramiko/__init__.py", line 22, in <module>
2018-11-07 21:48:44.306 Error: EventSystem: from paramiko.transport import SecurityOptions, Transport
2018-11-07 21:48:44.306 Error: EventSystem: File "/usr/lib/python3.5/paramiko/transport.py", line 89, in <module>
2018-11-07 21:48:44.306 Error: EventSystem: from paramiko.dsskey import DSSKey
2018-11-07 21:48:44.306 Error: EventSystem: File "/usr/lib/python3.5/paramiko/dsskey.py", line 36, in <module>
2018-11-07 21:48:44.306 Error: EventSystem: from paramiko.ber import BER, BERException
2018-11-07 21:48:44.306 Error: EventSystem: File "/usr/lib/python3.5/paramiko/ber.py", line 21, in <module>
2018-11-07 21:48:44.306 Error: EventSystem: import paramiko.util as util
2018-11-07 21:48:44.306 Error: EventSystem: AttributeError: module 'paramiko' has no attribute 'util'
2018-11-07 21:48:44.306 Error: EventSystem: Error in sys.excepthook:
2018-11-07 21:48:44.306 Error: EventSystem: Traceback (most recent call last):
2018-11-07 21:48:44.306 Error: EventSystem: File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
2018-11-07 21:48:44.306 Error: EventSystem: from apport.fileutils import likely_packaged, get_recent_crashes
2018-11-07 21:48:44.306 Error: EventSystem: ImportError: No module named 'apport'
2018-11-07 21:48:44.306 Error: EventSystem:
2018-11-07 21:48:44.306 Error: EventSystem: Original exception was:
2018-11-07 21:48:44.306 Error: EventSystem: Traceback (most recent call last):
2018-11-07 21:48:44.306 Error: EventSystem: File "/home/adm-ser/domoticz/scripts/python/ocript_device_Wifi-tes.py", line 3, in <module>
2018-11-07 21:48:44.306 Error: EventSystem: import sys, paramiko
2018-11-07 21:48:44.306 Error: EventSystem: File "/usr/lib/python3.5/paramiko/__init__.py", line 22, in <module>
2018-11-07 21:48:44.306 Error: EventSystem: from paramiko.transport import SecurityOptions, Transport
2018-11-07 21:48:44.306 Error: EventSystem: File "/usr/lib/python3.5/paramiko/transport.py", line 89, in <module>
2018-11-07 21:48:44.306 Error: EventSystem: from paramiko.dsskey import DSSKey
2018-11-07 21:48:44.306 Error: EventSystem: File "/usr/lib/python3.5/paramiko/dsskey.py", line 36, in <module>
2018-11-07 21:48:44.306 Error: EventSystem: from paramiko.ber import BER, BERException
2018-11-07 21:48:44.306 Error: EventSystem: File "/usr/lib/python3.5/paramiko/ber.py", line 21, in <module>
2018-11-07 21:48:44.306 Error: EventSystem: import paramiko.util as util
2018-11-07 21:48:44.306 Error: EventSystem: AttributeError: module 'paramiko' has no attribute 'util'
avant j'avais d'autres erreurs mais j'ai copier pas mal de modules de /usr/local/lib/python3.5/dist-packages/ vers /usr/lib/python3.5/
(les modules copiés sont paramiko, cryptografy, six.py, asn1crypto), mais j'ai l'impression que cela va être sans fin et j'espère qu'il existe une solution plus "basique".

Voilà mon problème, je suis ouvert à toute suggestion.

Cordialement,
Cortex
cortexlegeni
Messages : 2
Inscription : 07 nov. 2018, 21:36

Re: Problème importation module python

Message par cortexlegeni »

re-bonsoir,

j'ai trouvé un contournement pas très catholique mais cela fonctionne, j'aimerai cependant trouver comment faire autrement.

Pour le moment, je fais un script fictif qui est lancé par domoticz et qui lui relance mon script avec paramiko via l'appel à un call de python3.5 . C'est très bourrin mais cela à le mérite de fonctionner, je ne vois pas pourquoi dans cette situation les modules sont biens chargés alors qu'en direct ce n'est pas le cas.
Quel est l'utilisateur qui exécute les scripts dans domoticz ? Et quelle version de python utilise-t-il quand plusieurs sont disponibles, car je pensais qu'il prenais la 3.5, mais en direct elle fonctionne avec le root et même sans alors je ne vois vraiment pas d'ou vient le problème.

Bonne nuit.
FabianN
Messages : 1
Inscription : 28 sept. 2019, 22:02

Re: Problème importation module python

Message par FabianN »

Bonsoir,

C'est peut-être un peu tard, mais je me suis retrouvé avec le même problème en essayant de charger le module RPi.GPIO et il m'a fallu un moment pour trouver une solution. Je la colle donc ici :)

Le problème vient du path qui n'est pas défini de la même manière par Domoticz. Le chemin /usr/local/lib/python3.5 est bien inclus, mais pas /usr/local/lib/python3.5/dist-packages.
Avant de charger un module, il faut donc ajouter le répertoire manquant au path:

Code : Tout sélectionner

import sys
if not '/usr/local/lib/python3.5/dist-packages' in sys.path:
  sys.path.append('/usr/local/lib/python3.5/dist-packages')
import mon_module
Le "if" est nécessaire, sinon le répertoire sera ajouté au path à chaque lancement du script.

Il y a sûrement moyen de modifier le path par défaut de Domoticz, mais je n'ai pas trouvé comment faire.

A+

Fabian
eric
Messages : 91
Inscription : 13 mai 2017, 15:37

Re: Problème importation module python

Message par eric »

Salut!

Je déterre un peu le sujet mais j'ai le même problème avec la dernière version de domoticz sous Buster.
J'avais la même erreur à l'importation de la lib 'requests' dans un script python
J'ai rajouté ce que tu proposes et ca fonctionne
Par contre j'aimerais savoir si y'a un autre moyen de modifier le path dans domoticz pour éviter à chaque script de rajouter le chemin?
Merci!
Répondre