При изучении фреймворка FastApi, мне понадобилось построить приложение с определенной архитектурой. При этом у меня возникла такая проблема, что виртуальное окружение Python в моем случае Poetry не видел корневой пакет app коим являлась папка проекта. А всем импорты ы проекте я строил от корневого пакета, соответственно ничего у меня не работало.
Я довольно много времени потратил, пока не понял, что нужно просто установить переменную PYTHONPATH на корневую папку моего проекта.
Итак если речь идет о локальном проекте то делается это примерно так:
export PYTHONPATH=$PYTHONPATH:/home/nariman/dev/mariadent/api
В случае же, когда мы упаковываем наше приложение в Docker-контейнер, тогда надо установить переменную в Dockerfile.
Ниже приведу описание моего Dockerfile для FastApi приложения.
FROM python:3.9 # Set environment varibles ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 WORKDIR /code COPY ./alembic /code/alembic # Install poetry: RUN pip install poetry # Copy in the config files: COPY pyproject.toml poetry.lock run.sh prestart.sh alembic.ini ./ RUN chmod 777 prestart.sh RUN chmod 777 run.sh # Install only dependencies: RUN poetry install --no-root --no-dev COPY ./app /code/app/ WORKDIR /code EXPOSE 8000 # Без установки PYTHONPATH не работает нормальная иерархия пакетов множественного уровня ENV PYTHONPATH "/code"
На этом все, надеюсь сэкономил кому то время которое сам потратил на решение проблемы, да и для себя заметка на будущее.