Python 3.x выполняет сценарий со связанной человечностью сценариев

Я создал определенную структуру папок и файлов для создания моего проекта легче на, поддерживают и гибкий со временем.

Я имею, хранят их набор папок и сценариев Python в этой форме:

/home/ubuntu/main_folder : в этой папке у меня есть схема:

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

Я надеюсь выполнить сценарий, сохраненный в папке module1 под именем script.py с исполняемым сценарием process.sh:

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

     python3 module1/script.py

Проблема подходит, когда сценарий выполняется, потому что использует набор методов, прибывающих из сценария, сохраненного в названной папке configetl.

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

Как я должен установить правильно свой сценарий sh избежать этого и запланировать этот сценарий автоматически в кроне?

большое спасибо.

1
задан 30 May 2018 в 18:53

1 ответ

Ваш script.py вероятно, не может получить доступ config.py, потому что каталог configetl не находится в script.pyPYTHONPATH.

Вы могли протестировать это путем печати sys.path список в Вашем script.py при вызове от process.sh сценарий.

# Inside your script.py before calling any config functions
import sys
print(sys.path)

Вывод должен быть подобен этому:

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

Включать configetl каталог к Вашему PYTHONPATH и делает это видимым к script.py, необходимо добавить путь к configetl к sys.path список:

# Inside your script.py before calling any config functions
import sys
sys.path.append('../')

Это добавит весь верхний каталог уровня к Вашему PYTHONPATH.

Если требуется добавить только configetl каталог к Вашему PYTHONPATH, Вы могли сделать:

# Inside your script.py before calling any config functions
import sys
sys.path.append('../configetl')

Это потребует небольших изменений в способе, которым Вы импортируете config.py модуль. Необходимо будет импортировать его непосредственно без его названия родительского каталога, например.

from config import *

P.S. Используя звездообразный символ для импорта всего из модуля Python считается плохой практикой. Необходимо или импортировать весь модуль import config или перечислите объекты, которые требуется импортировать из того модуля, например. from config import function_one, function_two

2
ответ дан 7 December 2019 в 13:24

Другие вопросы по тегам:

Похожие вопросы: