Problème lancement script Python au démarrage Raspberry Pi

Bonjour,
Je suis étudiant et je cherche à lancer un script python au démarrage.
J’ai regardé pour écrire la commande sudo python3 /home/pi/DossierReussite/xbeeTestApi.py dans le fichier rc.local
Mon programme consiste à recevoir des données via des xbee et de les encoder dans une base de donnée (mariaDB).
Lorsque je lance le script via sudo /etc/rc.local, j’ai ceci
My IP address is 10.100.1.178
Traceback (most recent call last):
File « /home/pi/DossierReussite/xbeeTestApi.py », line 2, in
from digi.xbee.devices import ZigBeeDevice
ModuleNotFoundError: No module named ‹ digi ›

J’ai l’impression que je ne peux pas accéder à la librairie. Avez-vous des idées pour ce genre de problème ?
Merci d’avance pour vos réponses.

Bonjour,
Est-ce que tu as bien installé la librairie ?

Oui, j’ai tout d’abord essayé de lancer le script manuellement via le terminal.
Donc je peux affirmer que les librairies sont bien installés sur le Raspberry

quand tu lances le script à partir d’un terminal il fonctionne ?

Oui, sans problème.
Je n’ai aucune erreur dans le terminal si je fais:
pi@raspberry:~/DossierReussite $ python3 xbeeTestApi.py

Ce qui est bizarre c"est que le message d’erreur signal l’absence d’un module « digi » or le module se nomme

digi.xbee.devices

mon code ressemble à ça :
`
#!/usr/bin/env /usr/bin/python3
from digi.xbee.devices import ZigBeeDevice
from digi.xbee.devices import RemoteZigBeeDevice
from digi.xbee.models.address import XBee64BitAddress
import RPi.GPIO as GPIO
import mysql.connector as mysql
import datetime
import json
from time import sleep

print(‹ Current date/time:{} ›.format(datetime.datetime.now()))
PORT = « /dev/ttyAMA0 »
BAUD_RATE = 9600
NEW_TIMEOUT_FOR_SYNC_OPERATIONS = 60

def main():
xbee = ZigBeeDevice(PORT, BAUD_RATE)
remote = RemoteZigBeeDevice(xbee,XBee64BitAddress.from_hex_string(« 0013A20041E8A70B »))
# remote = [RemoteZigBeeDevice(xbee,XBee64BitAddress.from_hex_string(« 0013A20041E54AE6 »)),RemoteZigBeeDevice(xbee,XBee64BitAddress.from_hex_string(« MAC_ADDRESS »)),…]
journee = datetime.datetime.now()
if((journee.hour <=16)and(journee.hour>7)) :
try :
xbee.open()
xbee.send_data(remote,« ok »)
#print("%d" % xbee.get_sync_ops_timeout())
xbee_message = xbee.read_data_from(remote,1000)
xbee.set_sync_ops_timeout(NEW_TIMEOUT_FOR_SYNC_OPERATIONS)
data = xbee_message.data.decode(‹ utf-8 ›)
strA="".join([data[i] for i in range(len(data)-1)])
dataJson = json.loads(strA)
query = «  »« INSERT INTO GR10Test (Time,CompteurMinute,CompteurTotal,Etiquetteuse,T700,
Communication,Sauces,Encre,Autres) VAlUES (%s,%s,%s,%s,%s,%s,%s,%s,%s) »""
values = (dataJson[« Time »],dataJson[« Compteur_Pot »],dataJson[« Compteur_Total »],
dataJson[« Etiquetteuse »],dataJson[« T-700 »],dataJson[« Communication »],
dataJson[« Sauces »],dataJson[« Jet d’encre »],dataJson[« Autres »])
#print(values)
try :
db = mysql.connect(host=« localhost »,user = « root »,passwd = « XXX »,database = « XXX »)
try :
with db.cursor() as c :
c.execute(query,values)
db.commit()
print(« record inserted »)
except :
print(« Erreur d’encodage »)
except :
print(« Erreur de connexion »)
db.close()
journee=datetime.datetime.now()
finally :
if xbee is not None and xbee.is_open():
xbee.close()
else :
print(« à l’arrêt »)
if name == ‹ main ›:
main()
`
Je ne sais pas si ça peut aider ?

Peu etre un probléme de chemin, Est-ce que tu as essayé de démarrer script avec dans crontab la ligne:

@reboot /chemin/script.py

comme ton script commence par la ligne

#!/usr/bin/env /usr/bin/python3

il n’est pas necessaire de mettre python3

Je dois écrire dans sudo crontab -e directement la ligne @reboot /monChemin/script.py ?
Je ne connaissais pas vraiment la commande crontab.
Sur certains sites, ils parlent de faire un script sh. Je vois pas très bien en quoi ça consiste.

Si tu fais sudo crontab tu ecrit dans le crontab du root, il faut donc eviter le sudo pour ecrir dans le crontab de l’ utilisateur.
moi j’ ecrit un fichier cron.txt et ensuite je tappe la commande

crontab cron.txt
crontab -l

pour verifier

j’ai crée un fichier cron.txt avec la commande nano cron.txt puis j’ai fait les 2 commandes que vous m’avez écrite.
Une fois que c’est fait, je reboot le raspberry et c’est bon ?

Sujet que j’ai oublié de mentionner. Mon OS sur le raspberry ne possède pas d’interface de bureau.
Je n’ai pas de « Dekstop »

Au final, avec le crontab. J’ai réussi à le faire fonctionner.
J’ai utilisé la commande ajouter la ligne : @reboot python3 /chemin/script.py & dans le fichier sudo crontab -e et dans le fichier cron.txt.
Le programme se lance bien au démarrage. De plus, j’ai dû intégrer dans le script python, un while True: car mon programme devait s’exécuter en continu.
Je pensais que le symbole « & » m’aurait permis de ne pas faire de boucle infinie mais j’ai quand même du le faire.