web-dev-qa-db-fra.com

Python 'L'importation de pyodbc' ne fonctionne pas dans une tâche périodique

Suite à la mise à niveau d'un ordinateur serveur vers Ubuntu 16.04, tous les programmes python démarrés par cron échouent lors de l'instruction 'import pyodbc'. J'ai installé ce paquet normalement via

pip3 install pyodbc

Si je crée un programme simple contenant uniquement l'instruction 'import pyodbc', cela fonctionne si je l'exécute à partir de la ligne de commande:

$ python3 /home/test.py
$

J'ai demandé au même programme d'être exécuté à partir de cron (voici la partie pertinente de crontab):

$ crontab –l
0,5,10,15,20,25,30,35,40,45,50,55 8,10,12-18 * * * python3 /home/test.py 1>>/var/log/python3.log

Ensuite, dans le fichier journal, je reçois:

Traceback (most recent call last):
  File "/home/test.py", line 1, in <module>
    import pyodbc
ImportError: No module named 'pyodbc'

Le résultat est le même si je lance depuis le cron 'principal' ou depuis une crontab utilisateur '. Que puis-je faire pour résoudre le problème?

1
Marc Vanhoomissen

OK, grâce à la suggestion de Jacob Vlijm, j'ai finalement trouvé la solution: le paquet 'pyodbc' avait été installé sous user1 (/home/user1/.local/lib/python3.5/site-packages/). Lorsque je me suis connecté en tant qu'utilisateur1 de mon terminal, le programme a pu trouver le module. En utilisant cron, je lance généralement les programmes sous un autre utilisateur (user2).

C'était le problème. Courir dans cron via utilisateur1, tout était OK. La dernière question que je vais étudier est de savoir pourquoi la commande 'pip3 install pyodbc==3.0.10' a mis le paquet à la disposition de l'utilisateur1 et non de tous les utilisateurs.

1
Marc Vanhoomissen

Bon, faites votre programme comme ça

#!/usr/bin/env python3
import pyodbc

Donner des autorisations exécutables comme

chmod +x filename.py

et maintenant ajoutez-le cron et permet de voir.

0
rɑːdʒɑ