# `python-base` sets up all our shared environment variables FROM python:3.10-slim # python ENV PYTHONUNBUFFERED=1 \ # prevents python creating .pyc files PYTHONDONTWRITEBYTECODE=1 \ \ # pip PIP_NO_CACHE_DIR=off \ PIP_DISABLE_PIP_VERSION_CHECK=on \ PIP_DEFAULT_TIMEOUT=100 \ \ # poetry # https://python-poetry.org/docs/configuration/#using-environment-variables POETRY_VERSION=1.3.2 \ # make poetry install to this location POETRY_HOME="/opt/poetry" \ # make poetry create the virtual environment in the project's root # it gets named `.venv` POETRY_VIRTUALENVS_IN_PROJECT=true \ # do not ask any interactive question POETRY_NO_INTERACTION=1 \ \ # paths # this is where our requirements + virtual environment will live PYSETUP_PATH="/opt/pysetup" \ VENV_PATH="/opt/pysetup/.venv" # prepend poetry and venv to path ENV PATH="$POETRY_HOME/bin:$VENV_PATH/bin:$PATH" RUN apt-get update \ && apt-get install --no-install-recommends -y \ # deps for installing poetry curl \ # deps for building python deps build-essential libpq-dev # install poetry - respects $POETRY_VERSION & $POETRY_HOME RUN curl -sSL https://install.python-poetry.org | python3 - # copy project requirement files here to ensure they will be cached. WORKDIR $PYSETUP_PATH COPY poetry.lock pyproject.toml ./ # install runtime deps - uses $POETRY_VIRTUALENVS_IN_PROJECT internally RUN poetry install --only-root RUN poetry add "git+https://github.com/ibiscp/langchain.git@ibis" WORKDIR /app ENV PATH="/opt/pysetup/.venv/bin:$PATH" COPY src/ . EXPOSE 80 CMD [ "uvicorn", "--host", "0.0.0.0", "--port", "80", "app:app" ]