#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! Ты мне очень помогаешь!