Ошибка, когда я пытаюсь использовать импорт

#python-3.x #import #importerror #relative-import

Вопрос:

Я кодирую приложение, в котором есть 2 службы, интегрированные с rabbitmq(издатель и потребитель). У меня есть библиотека папок, содержащая класс manager_mq, который используется для управления процессом pub/sub моего приложения.

Я структурировал каталог так, чтобы он был похож на изображение:

введите описание изображения здесь

В моем файле consumer или publisher .py, когда я пытаюсь импортировать manager_mq, возвращается ошибка.

Мое желание быть таким:

 from services.lib.manager_mq import Manager
 

Однако на консоли возвращается ошибка.

 Traceback (most recent call last):
  File "consumer.py", line 5, in <module>      
    from services.lib.manager_mq import Manager
ModuleNotFoundError: No module named 'services'
 

Я пытался использовать относительный импорт, но ошибка все еще возникает.

 Traceback (most recent call last):
  File "consumer.py", line 5, in <module>
    from ..lib.manager_mq import Manager
ImportError: attempted relative import with no known parent package
 

Как я могу решить эту проблему?

Ответ №1:

Здесь не будет работать как абсолютный, так и относительный импорт. Для получения дополнительной информации ознакомьтесь с разделом Импорт из родительского каталога.

В этом случае, вероятно, было бы проще всего использовать sys.path для добавления lib в путь.

 application
├── consumer
│   └── __init__.py
│   └── consumer.py
└── lib
    └── __init__.py
    └── manager_mq.py
 

manager_mq.py тестовый код:

 class Manager:
    def __init__(self) -> None:
        print('test')
 

consumer.py тестовый код:

 import sys
sys.path.append("../lib")

from manager_mq import Manager

m = Manager()
 

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

1. Большое вам спасибо @Gilbert Tanner! Ты мне очень помогаешь!