Абсолютные импорты в Python работают некорректно
Пишу микросервисное приложение на Python FastAPI и столкнулся со следующей проблемой: при попытке абсолютного импорта какого-либо модуля из какой-либо директории самого микросервиса, импорт происходит из аналогичной директории другого микросервиса.
Дерево каталогов прикрепил ниже:
В данном случае пытался в main.py auth-service импортировать schemas следующим образом: from app.schemas import user as user_schemas
, а в итоге импорт произошёл из аналогичной директории profile-service.
При этом, если попробовать то же самое провернуть внутри gateway, то там все работает корректно.
Ответы (2 шт):
Решение было найдено, по какой-то причине все имена, которые содержали дефис, работали некорректно. После переименования все работает как надо
Открыв PEP 8 - вот что прочитал:
Package and Module Names
Modules should have short, all-lowercase names. Underscores can be used in the module name if it improves readability. Python packages should also have short, all-lowercase names, although the use of underscores is discouraged.
Перевод:
Имена пакетов и модулей
Модули должны иметь короткие имена, состоящие полностью из строчных букв. Подчеркивания можно использовать в имени модуля, если это улучшает читаемость. Пакеты Python также должны иметь короткие имена, состоящие полностью из строчных букв, использование подчеркиваний не рекомендуется.
Хоть в PEP 8 ничего про -
не было написано, но как я понимаю причину по которой их не используют в названиях модулей/пакетов, связана с тем, что дефис (минус) является оператором в Python, что соответственно и вызывает ошибку импорта.
Так что согласно рекомендациям, нужно использовать такое название пакета: authservice.
Менее предпочтительное имя с подчеркиванием: auth_service