Проблемы с импортом из подмодулей

#python #git

#python #git

Вопрос:

У меня есть проект со следующей структурой:

 main_model
    __init__.py
    main.py
    second_module
        __init__.py
        second.py
        third_module
            __init__.py
            third.py
 

second_module и third_module оба подмодуля Git используются в качестве библиотек многими другими проектами.

Первая строка main.py — это оператор импорта: from main_model.second_module import second И первая строка second.py слишком: from second_module.third_module import third

При запуске main.py возникает ошибка со следующей трассировкой:

 Traceback (most recent call last):
  File "/main_model/main.py", line 1, in <module>
    from main_model.second_module import func_a, func_b
  File "/main_model/second_module/second.py", line 1, in <module>
    from third_module.third import func_c, func_d
ModuleNotFoundError: No module named 'third_module'
 

Поэтому, очевидно, мне нужно было бы изменить инструкцию import в second.py to be from main_model.second_module.third_module import third . Однако я не могу этого сделать, потому second_module что это отдельный подмодуль.

Существует ли согласованный способ структурирования импорта или изменения PYTHONPATH, который позволил бы использовать один и тот же синтаксис импорта со всех уровней?

Комментарии:

1. «Однако я не могу этого сделать, потому что second_module — это автономный подмодуль». тогда он должен быть установлен как таковой. Модуль должен каким-то образом находиться на пути.

2. PYHTONPATH должен содержать только верхний, затем выполните абсолютный импорт, т.Е. Из верхних from main_mode... или относительных from .second_module.third_module

3. Я пробовал относительный импорт и получаю «ImportError: попытка относительного импорта без известного родительского пакета». @juanpa.arrivillaga Можете ли вы сказать мне, что вы подразумеваете под «установленным как таковым»?

4. @triphook когда вы устанавливаете пакет, например pip install somelibrary , который добавляет установленные модули в ваш site-packages каталог, поэтому вы можете import использовать их из любого места.

5. Это не будет установлено, оно будет развернуто в AWS EC2, так что у меня нет такой возможности