Что делать если Python не видит модуль или пакет?

Что делать если Python не видит модуль или пакет?

При изучении фреймворка 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"

На этом все, надеюсь сэкономил кому то время которое сам потратил на решение проблемы, да и для себя заметка на будущее.

Добавить комментарий

Ваш адрес email не будет опубликован.

Яндекс.Метрика