[Version beta] Erreur python lors d'un import

Bonjour,

Depuis quelques temps, j’ai l’erreur suivante toutes les 5 minutes :

[2023-01-23 20:30:03]ERROR : Attention je pense qu'il y a un soucis avec le démon que j'ai relancé plus de 3 fois consécutivement
Traceback (most recent call last):
File "/var/www/html/plugins/mymodbus/ressources/mymodbus_demond.py", line 23, in 
from pymodbus.compat import IS_PYTHON3, PYTHON_VERSION
ModuleNotFoundError: No module named 'pymodbus.compat'
Traceback (most recent call last):
File "/var/www/html/plugins/mymodbus/ressources/mymodbus_demond.py", line 23, in 
from pymodbus.compat import IS_PYTHON3, PYTHON_VERSION
ModuleNotFoundError: No module named 'pymodbus.compat'

Ca se répète sans doute à cause du fait que j’ai 2 équipements MyModbus.

J’ai essayé de relancer l’installation des dépendances, sans changement.

  • Dans une debian 11 virtualisée sur un NAS Synology
  • python en version 3.9
  • pymodbus est en version 2.5.3 (comme c’est forcé dans install_apt.sh, mais la dernière version compatible avec python >= 3.8 est la 3.1.0 d’après cette page)
  • Jeedom est en version 4.3.15
  • MyModbus est en version beta

Je pense qu’il faudrait faire un truc de ce genre dans ‹ plugins/mymodbus/ressources/mymodbus_demond.py › à partir de la ligne 22:

#Compatibility
try:
	from pymodbus.compat import IS_PYTHON3, PYTHON_VERSION
	if IS_PYTHON3 and PYTHON_VERSION >= (3, 4):
		print("Version de python ok")
		
	else:
		sys.stderr("merci d'installer Python 3 ou de relancer les dépendances Mymodbus")
		sys.exit(1)
except ModuleNotFoundError:
	# version de pymodbus sans mode de compatibilité: OK
	pass

(mymodbus_demond.py avec un D ???)

Ou alors passer en version pymodbus 3.1.0 ?

A+
Michel

En investiguant un peu, je me suis rendu compte que dans ‹ /usr/local/lib/python3.9/dist-packages/pymodbus/compat.py › était écrit la chose suivante :

import sys
import six

# --------------------------------------------------------------------------- #
# python version checks
# --------------------------------------------------------------------------- #
PYTHON_VERSION = sys.version_info
IS_PYTHON2 = six.PY2
IS_PYTHON3 = six.PY3
IS_PYPY = hasattr(sys, 'pypy_translation_info')
IS_JYTHON = sys.platform.startswith('java')

Et donc le fichier ‹ plugins/mymodbus/ressources/mymodbus_demond.py › pourrait commencer comme ça:

import sys
import time
import argparse
import os
import subprocess
from threading import Thread, Lock
from six import PY3 as six_PY3	# nouvelle ligne

# Conversion
from pymodbus.constants import Endian
from pymodbus.payload import BinaryPayloadDecoder
from pymodbus.payload import BinaryPayloadBuilder

#Compatibility
if six_PY3 and sys.version_info >= (3, 4):	# une seule ligne au lieu de deux avec les accès directs
	print("Version de python ok")
	
else:
	sys.stderr("merci d'installer Python 3 ou de relancer les dépendances Mymodbus")
	sys.exit(1)

Ce qui serait plus propre.

Chez moi en tout cas, ça fonctionne.

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