1 votes

Python 3.x exécutez le script avec des scripts liés ubuntu

J'ai créé une certaine structure de dossiers et fichiers pour rendre mon projet plus facile à maintenir et flexible dans le temps.

J'ai stocké ces bunch de dossiers et scripts python de cette manière :

/home/ubuntu/main_folder : dans ce dossier j'ai le schéma :

     |-main_foler
     |
     |-module1
     |---script.py
     |
     |configetl
     |---config.py
     |
     |process.sh

Je prévois d'exécuter le script stocké dans le dossier module1 sous le nom script.py avec le script exécutable process.sh:

     #!/bin/sh
     cd /home/ubuntu/main_folder &&

     python3 module1/script.py

Le problème survient lorsque le script est exécuté car il utilise un tas de méthodes provenant d'un script stocké dans le dossier appelé configetl.

        error: File "module1/script.py", line 4, in 
          from configetl.config import *
        ImportError: No module named 'configetl'

Comment devrais-je configurer correctement mon script sh pour éviter cela et planifier ce script automatiquement dans un cron ?

Merci beaucoup.

2voto

haralambov Points 1214

Votre fichier script.py ne peut probablement pas accéder au fichier config.py, car le répertoire configetl n'est pas dans le PYTHONPATH de script.py.

Vous pourriez tester cela en imprimant la liste sys.path dans votre script.py lorsque vous l'appelez depuis le script process.sh.

# À l'intérieur de votre script.py avant d'appeler des fonctions de configuration
import sys
print(sys.path)

La sortie doit être similaire à ceci:

['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/usr/lib/python3.6/site-packages']

Pour inclure le répertoire configetl dans votre PYTHONPATH et le rendre visible pour le script.py, vous devez ajouter le chemin du configetl à la liste sys.path:

# À l'intérieur de votre script.py avant d'appeler des fonctions de configuration
import sys
sys.path.append('../')

Cela ajoutera l'ensemble du répertoire du niveau supérieur à votre PYTHONPATH.

Si vous voulez ajouter uniquement le répertoire configetl à votre PYTHONPATH, vous pouvez faire ceci:

# À l'intérieur de votre script.py avant d'appeler des fonctions de configuration
import sys
sys.path.append('../configetl')

Cela nécessitera de petits changements dans la façon dont vous importez le module config.py. Vous devrez l'importer directement, sans le nom de son répertoire parent par exemple

from config import *

P.S. Utiliser le symbole "*" pour importer tout d'un module Python est considéré comme une mauvaise pratique. Vous devriez soit importer l'ensemble du module import config soit lister les objets que vous souhaitez importer de ce module par exemple from config import function_one, function_two

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X