Python Poety를 Docker
, can를 of of of of of of of 。Dockerfile
할 수 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.poetry.lock
★★★★★★★★★★★★★★★★★」pyproject.toml
도커에서 이미지/컨테이너에 넣을 수 있습니까?
사용할 때 주의해야 할 점이 몇 가지 있습니다.poetry
docker
.
인스톨
poetry
★★★★
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
" " " 가 허용됩니다.poetry
그리고 그 의존성은 당신의 의존성으로부터 격리되어야 합니다.하지만, 제 견해로는, 두 가지 이유로 그것은 그다지 좋은 것이 아닙니다.
poetry
버전이 업데이트를 받고 빌드가 중단될 수 있습니다., '보다 낫다'를 지정할 수 .POETRY_VERSION
환경 변수입니다.는 그것을 합니다.- 파일 수정으로부터 아무런 보호도 받지 않고 인터넷에서 내 컨테이너로 물건을 연결하는 것은 마음에 들지 않는다.
저는 ㅇㅇㅇㅇㅇㅇ를 씁니다.pip install 'poetry==$POETRY_VERSION'
보시는 바와 같이 버전을 고정하는 것이 좋습니다.
이 을 this한 this this this this your your your your this this this this 에 핀으로 .pyproject.toml
아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아.
[build-system]
# Should be the same as `$POETRY_VERSION`:
requires = ["poetry>=1.0"]
build-backend = "poetry.masonry.api"
과 로컬의 합니다.docker
환경을 개선합니다.
캐싱 의존 관계
은 「」의 경우뿐입니다.pyproject.toml
★★★★★★★★★★★★★★★★★」poetry.lock
파일이 변경됩니다.이치노캐시 레이어를 동작시키려면 , 다음과 같이 할 필요가 있습니다.
COPY poetry.lock pyproject.toml /code/
poetry
이 인스톨 되어 있습니다만, 다른 파일이 추가되기 전에 인스톨 됩니다.
버추얼엔비
해야 할 은 '하다'입니다.virtualenv
we. 는는필필 in 에는 필요 없습니다.docker
되어 있습니다 이미 격리되어 있습니다.'는 '우리'를 씁니다.poetry config virtualenvs.create false
끄도록 설정했습니다.
개발 vs 실가동
것을 Dockerfile
개발 및 운영 모두에 대해 다음과 같은 환경변수에 따라 서로 다른 의존관계 세트를 설치해야 합니다.
poetry install $(test "$YOUR_ENV" == production && echo "--no-dev")
입니다.$YOUR_ENV
인스톨 되는 관계 () 또는 production only (실가동만)로 설정합니다.( ) ( ) 는디 ( )--no-dev
또한 보다 나은 환경을 위해 다음과 같은 옵션을 추가할 수도 있습니다.
--no-interaction
--no-ansi
을 보다 쉽게 위한
결과
다음과 같은 결과가 초래됩니다.
FROM python:3.6.6-alpine3.7
ARG YOUR_ENV
ENV YOUR_ENV=${YOUR_ENV} \
PYTHONFAULTHANDLER=1 \
PYTHONUNBUFFERED=1 \
PYTHONHASHSEED=random \
PIP_NO_CACHE_DIR=off \
PIP_DISABLE_PIP_VERSION_CHECK=on \
PIP_DEFAULT_TIMEOUT=100 \
POETRY_VERSION=1.0.0
# System deps:
RUN pip install "poetry==$POETRY_VERSION"
# Copy only requirements to cache them in docker layer
WORKDIR /code
COPY poetry.lock pyproject.toml /code/
# Project initialization:
RUN poetry config virtualenvs.create false \
&& poetry install $(test "$YOUR_ENV" == production && echo "--no-dev") --no-interaction --no-ansi
# Creating folders, and files for a project:
COPY . /code
여기서 완전히 작동하는 실제 예를 찾을 수 있습니다: we-make-django-template
2019-12-17 갱신
poetry
까지
시와 venv를 사용한 다단계 도커 구축
virtualenv 생성을 사용하지 않도록 설정하지 마십시오.Virtualenvs는 다단계 빌드를 활용할 수 있는 우아한 방법을 제공하기 때문에 Docker 빌드에 도움이 됩니다.한마디로 빌드 단계에서는 모든 것이 virtualenv에 설치되고 최종 단계에서는 virtualenv가 작은 이미지로 복사됩니다.
poetry export
코드를 복사하기 전에 먼저 고정된 요구 사항을 설치합니다.이를 통해 Docker 빌드 캐시를 사용할 수 있으며 코드의 행을 변경했다고 해서 종속성을 재설치하지 않습니다.
「 」를하지 주세요.poetry install
코드를 인스톨 하면, 편집 가능한 인스톨이 실행되기 때문에, 인스톨 합니다.''를 합니다.poetry build
(PEP 517을 사용하면 이 모든 프로세스를 간단한 방법으로 수행할 수 있습니다).pip install .
단, 빌드 아이솔레이션으로 인해 Poety의 다른 카피를 인스톨 할 수 있습니다.)
【Postgres】【Alphine】【플라스크】【Docker】【도커】.이 예에서는 엔트리 포인트스크립트를 사용하여 virtualenv를 활성화합니다.는 Python에서 할 수 에 엔트리 ./venv/bin/python
안에서CMD
★★★★★★ 。
도커 파일
FROM python:3.7.6-alpine3.11 as base
ENV PYTHONFAULTHANDLER=1 \
PYTHONHASHSEED=random \
PYTHONUNBUFFERED=1
WORKDIR /app
FROM base as builder
ENV PIP_DEFAULT_TIMEOUT=100 \
PIP_DISABLE_PIP_VERSION_CHECK=1 \
PIP_NO_CACHE_DIR=1 \
POETRY_VERSION=1.0.5
RUN apk add --no-cache gcc libffi-dev musl-dev postgresql-dev
RUN pip install "poetry==$POETRY_VERSION"
RUN python -m venv /venv
COPY pyproject.toml poetry.lock ./
RUN poetry export -f requirements.txt | /venv/bin/pip install -r /dev/stdin
COPY . .
RUN poetry build && /venv/bin/pip install dist/*.whl
FROM base as final
RUN apk add --no-cache libffi libpq
COPY --from=builder /venv /venv
COPY docker-entrypoint.sh wsgi.py ./
CMD ["./docker-entrypoint.sh"]
도커 진입점쉿
#!/bin/sh
set -e
. /venv/bin/activate
while ! flask db upgrade
do
echo "Retry..."
sleep 1
done
exec gunicorn --bind 0.0.0.0:5000 --forwarded-allow-ips='*' wsgi:app
wsgi.py
import your_app
app = your_app.create_app()
TL;DR
★★★★★★★★★★★★★★★★★★★★★를 셋업 할 수 있었습니다.poetry
잠 a Django
이용하여 계획하다postgres
, 이렇게 요.Dockerfile
:
FROM python:slim
# Keeps Python from generating .pyc files in the container
ENV PYTHONDONTWRITEBYTECODE 1
# Turns off buffering for easier container logging
ENV PYTHONUNBUFFERED 1
# Install and setup poetry
RUN pip install -U pip \
&& apt-get update \
&& apt install -y curl netcat \
&& curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
ENV PATH="${PATH}:/root/.poetry/bin"
WORKDIR /usr/src/app
COPY . .
RUN poetry config virtualenvs.create false \
&& poetry install --no-interaction --no-ansi
# run entrypoint.sh
ENTRYPOINT ["/usr/src/app/entrypoint.sh"]
은 음음음음 this this this this this this this 。entrypoint.sh
:
#!/bin/sh
if [ "$DATABASE" = "postgres" ]
then
echo "Waiting for postgres..."
while ! nc -z $SQL_HOST $SQL_PORT; do
sleep 0.1
done
echo "PostgreSQL started"
fi
python manage.py migrate
exec "$@"
상세설명
주의사항:
사용하기로 했습니다.
slim
alpine
★★★의python
는 '비록'이라고alpine
이미지는 Docker 이미지의 크기를 줄이고 빌드 속도를 높여야 합니다. Python을 사용하면 실제로 이미지를 조금 더 크게 만들 수 있으며 빌드하는 데 시간이 걸립니다(자세한 내용은 이 기사를 참조하십시오.이 구성을 사용하면 Python 패키지를 올바르게 설치하기 위해 추가 패키지를 추가할 필요가 없기 때문에 알파인 이미지를 사용하는 것보다 컨테이너를 빠르게 빌드할 수 있습니다.
poetry
매뉴얼에 기재되어 있는 URL에서 직접 액세스 할 수 있습니다.에 의해 제공되는 경고를 알고 있습니다.sobolevn
인 ''를 하는 것이 좋다고 생각합니다.poetry
정기적으로 업데이트해야 하는 환경 변수에 의존하는 것보다 기본적으로 더 많은 정보를 제공합니다.중
PATH
매우 중요합니다.그렇지 않으면 시를 찾을 수 없다는 오류가 발생합니다.비단뱀 통역사 해서 만들어지지는 .
poetry
종속성을 설치하기 전에 가상 환경을 생성합니다.
★★★★★★★가 필요한 경우alpine
Dockerfile
:
FROM python:alpine
# Keeps Python from generating .pyc files in the container
ENV PYTHONDONTWRITEBYTECODE 1
# Turns off buffering for easier container logging
ENV PYTHONUNBUFFERED 1
# Install dev dependencies
RUN apk update \
&& apk add curl postgresql-dev gcc python3-dev musl-dev openssl-dev libffi-dev
# Install poetry
RUN pip install -U pip \
&& curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
ENV PATH="${PATH}:/root/.poetry/bin"
WORKDIR /usr/src/app
COPY . .
RUN poetry config virtualenvs.create false \
&& poetry install --no-interaction --no-ansi
# run entrypoint.sh
ENTRYPOINT ["/usr/src/app/entrypoint.sh"]
해 주세요.alpine
에는 몇 의존관계가 필요합니다.postgresql-dev gcc python3-dev musl-dev openssl-dev libffi-dev
올바르게 동작합니다.
이것은 @Claudio가 제공하는 답변의 마이너리비전입니다.이러한 리비전에서는 새로운 리비전에서는poetry install --no-root
@sobolevn이 답변한 대로 특징지어집니다.
특정 가상 환경에 종속성을 설치하도록 시를 강제하려면 먼저 가상 환경을 활성화해야 합니다.
. /path/to/virtualenv/bin/activate && poetry install
따라서 @Claudio의 답변에 이러한 답변이 추가되어 있습니다.
FROM python:3.9-slim as base
ENV PYTHONFAULTHANDLER=1 \
PYTHONHASHSEED=random \
PYTHONUNBUFFERED=1
RUN apt-get update && apt-get install -y gcc libffi-dev g++
WORKDIR /app
FROM base as builder
ENV PIP_DEFAULT_TIMEOUT=100 \
PIP_DISABLE_PIP_VERSION_CHECK=1 \
PIP_NO_CACHE_DIR=1 \
POETRY_VERSION=1.1.3
RUN pip install "poetry==$POETRY_VERSION"
RUN python -m venv /venv
COPY pyproject.toml poetry.lock ./
RUN . /venv/bin/activate && poetry install --no-dev --no-root
COPY . .
RUN . /venv/bin/activate && poetry build
FROM base as final
COPY --from=builder /venv /venv
COPY --from=builder /app/dist .
COPY docker-entrypoint.sh ./
RUN . /venv/bin/activate && pip install *.whl
CMD ["./docker-entrypoint.sh"]
개발 할에는 을 합니다.--no-dev
RUN . /venv/bin/activate && poetry install --no-dev --no-root
@sobolevn의 답변에 나타난 것과 같은 것에 대해
RUN . /venv/bin/activate && poetry install --no-root $(test "$YOUR_ENV" == production && echo "--no-dev")
적절한 환경 변수 선언을 추가한 후.
이 예에서는 debian-slim을 기반으로 하지만 알파인 기반 이미지에 맞게 조정하는 것은 간단한 작업입니다.
최소한의 구성으로 동작합니다.
FROM python:3.7
ENV PIP_DISABLE_PIP_VERSION_CHECK=on
RUN pip install poetry
WORKDIR /app
COPY poetry.lock pyproject.toml /app/
RUN poetry config virtualenvs.create false
RUN poetry install --no-interaction
COPY . /app
@sobolevn 설정만큼 안전하지 않습니다.
참고로 프로젝트에 편집 가능한 설치가 가능한 경우 한두 줄 삭제될 수 있습니다.
FROM python:3.7
ENV PIP_DISABLE_PIP_VERSION_CHECK=on
WORKDIR /app
COPY poetry.lock pyproject.toml /app/
RUN pip install -e .
COPY . /app
다음은 종속성이 있는 계층(이러한 계층이 변경된 경우에만 빌드됨)과 완전한 소스 코드를 가진 계층이 이미지에 추가되는 제거 예입니다. ★★poetry
site-packages
구성 아티팩트를 남겨두면 제거할 수도 있습니다.
FROM python:alpine
WORKDIR /app
COPY poetry.lock pyproject.toml ./
RUN pip install --no-cache-dir --upgrade pip \
&& pip install --no-cache-dir poetry \
\
&& poetry config settings.virtualenvs.create false \
&& poetry install --no-dev \
\
&& pip uninstall --yes poetry \
COPY . ./
도커 멀티 스테이지 빌드와 파이톤 슬림 이미지를 사용하여 시 잠금 장치를 요건에 맞게 내보냅니다.txt를 사용하여 virtualenv 내부의 pip inside virtualenv
크기가 가장 작고 런타임 이미지에 시가 필요 없으며 모든 버전을 고정합니다.
FROM python:3.9.7 as base
ENV PIP_DISABLE_PIP_VERSION_CHECK=1
WORKDIR /app
FROM base as poetry
RUN pip install poetry==1.1.12
COPY poetry.lock pyproject.toml /app/
RUN poetry export -o requirements.txt
FROM base as build
COPY --from=poetry /app/requirements.txt /tmp/requirements.txt
RUN python -m venv .venv && \
.venv/bin/pip install 'wheel==0.36.2' && \
.venv/bin/pip install -r /tmp/requirements.txt
FROM python:3.9.7-slim as runtime
ENV PIP_DISABLE_PIP_VERSION_CHECK=1
WORKDIR /app
ENV PATH=/app/.venv/bin:$PATH
COPY --from=build /app/.venv /app/.venv
COPY . /app
@lmiguelvargasf의 답변을 기반으로 한 도커 파일입니다.자세한 설명은 그의 글을 참고하세요.중요한 변경은 다음과 같습니다.
는 현재 설치 프로그램인 재재 the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the 를 사용하고 있습니다.
install-poetry.py
되지 않는 ""가 ""get-poetry.py
공식 문서에 권장된 대로입니다.또, 를 사용해 특정의 버전을 인스톨 합니다.--version
"예"를 할 수 있습니다.POETRY_VERSION
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★!PATH
은 ★★★★★★★★★★★★★★★★★★★★★./root/.local/bin:$PATH
${PATH}:/root/.poetry/bin
OP dock 도커
FROM python:3.10.4-slim-buster
ENV PYTHONDONTWRITEBYTECODE 1 \
PYTHONUNBUFFERED 1
RUN apt-get update \
&& apt-get install curl -y \
&& curl -sSL https://install.python-poetry.org | python - --version 1.1.13
ENV PATH="/root/.local/bin:$PATH"
WORKDIR /usr/app
COPY pyproject.toml poetry.lock ./
RUN poetry config virtualenvs.create false \
&& poetry install --no-dev --no-interaction --no-ansi
COPY ./src ./
EXPOSE 5000
CMD [ "poetry", "run", "gunicorn", "-b", "0.0.0.0:5000", "test_poetry.app:create_app()" ]
잠금 패키지(잠금 파일의 모든 버전에 따라 패키지)를 사용하여 솔루션을 만들었습니다.그 결과 요건 파일이 없는 클린 pip 전용 설치가 됩니다.
절차는 패키지 제작, 잠금 패키지 제작, 컨테이너에 양쪽 휠 복사, 양쪽 휠 설치입니다.
치::poetry add --dev poetry-lock-package
도커 빌드 이외의 순서는 다음과 같습니다.
poetry build
poetry run poetry-lock-package --build
당신의 ★★★★★★★★★★★★★★★★★.Dockerfile
하다
FROM python:3-slim
COPY dist/*.whl /
RUN pip install --no-cache-dir /*.whl \
&& rm -rf /*.whl
CMD ["python", "-m", "entry_module"]
여기 있는 모든 답변은 버전 문제를 피하기 위해 Poetry를 설치하는 pip 방법을 사용하고 있습니다.Poety를 설치하는 공식 방법은 가장 적절한 버전을 설치하도록 정의된 경우 PHOETY_VERSION env 변수를 참조하십시오.
여기 github에 문제가 있습니다.이 티켓의 솔루션은 매우 흥미롭다고 생각합니다.
# `python-base` sets up all our shared environment variables
FROM python:3.8.1-slim as python-base
# 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.0.3 \
# 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"
# `builder-base` stage is used to build deps + create our virtual environment
FROM python-base as builder-base
RUN apt-get update \
&& apt-get install --no-install-recommends -y \
# deps for installing poetry
curl \
# deps for building python deps
build-essential
# install poetry - respects $POETRY_VERSION & $POETRY_HOME
RUN curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python
# 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 --no-dev
# `development` image is used during development / testing
FROM python-base as development
ENV FASTAPI_ENV=development
WORKDIR $PYSETUP_PATH
# copy in our built poetry + venv
COPY --from=builder-base $POETRY_HOME $POETRY_HOME
COPY --from=builder-base $PYSETUP_PATH $PYSETUP_PATH
# quicker install as runtime deps are already installed
RUN poetry install
# will become mountpoint of our code
WORKDIR /app
EXPOSE 8000
CMD ["uvicorn", "--reload", "main:app"]
# `production` image used for runtime
FROM python-base as production
ENV FASTAPI_ENV=production
COPY --from=builder-base $PYSETUP_PATH $PYSETUP_PATH
COPY ./app /app/
WORKDIR /app
CMD ["gunicorn", "-k", "uvicorn.workers.UvicornWorker", "main:app"]
적절한 방법을 확인할 수 있는 프로젝트는 두 가지가 있습니다.또한 이러한 프로젝트를 사용하여 기본 이미지이기 때문에 독자적인 이미지를 구축할 수 있습니다.
- https://github.com/max-pfeiffer/uvicorn-poetry
- https://github.com/max-pfeiffer/uvicorn-gunicorn-poetry
기본 이미지 도커 파일: https://github.com/max-pfeiffer/uvicorn-poetry/blob/main/build/Dockerfile
ARG OFFICIAL_PYTHON_IMAGE
FROM ${OFFICIAL_PYTHON_IMAGE}
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=off \
PIP_DISABLE_PIP_VERSION_CHECK=on \
PIP_DEFAULT_TIMEOUT=100 \
POETRY_VERSION=1.1.11 \
POETRY_HOME="/opt/poetry" \
POETRY_VIRTUALENVS_IN_PROJECT=true \
PYTHONPATH=/application_root \
VIRTUAL_ENVIRONMENT_PATH="/application_root/.venv"
ENV PATH="$POETRY_HOME/bin:$VIRTUAL_ENVIRONMENT_PATH/bin:$PATH"
# https://python-poetry.org/docs/#osx--linux--bashonwindows-install-instructions
RUN apt-get update \
&& apt-get install --no-install-recommends -y \
build-essential \
curl \
&& curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python - \
&& apt-get purge --auto-remove -y \
build-essential \
curl
COPY ./scripts/start_uvicorn.sh /application_server/
RUN chmod +x /application_server/start_uvicorn.sh
COPY ./scripts/pytest_entrypoint.sh ./scripts/black_entrypoint.sh /entrypoints/
RUN chmod +x /entrypoints/pytest_entrypoint.sh
RUN chmod +x /entrypoints/black_entrypoint.sh
EXPOSE 80
CMD ["/application_server/start_uvicorn.sh"]
샘플 프로젝트 이미지 도커 파일:https://github.com/max-pfeiffer/uvicorn-poetry/blob/main/examples/fast_api_multistage_build/Dockerfile
ARG BASE_IMAGE_NAME_AND_TAG=pfeiffermax/uvicorn-poetry:1.0.1-python3.9.8-slim-bullseye
FROM ${BASE_IMAGE_NAME_AND_TAG} as base-image
WORKDIR /application_root
# install [tool.poetry.dependencies]
# this will install virtual environment into /.venv because of POETRY_VIRTUALENVS_IN_PROJECT=true
# see: https://python-poetry.org/docs/configuration/#virtualenvsin-project
COPY ./poetry.lock ./pyproject.toml /application_root/
RUN poetry install --no-interaction --no-root --no-dev
FROM base-image as test-base-image
ENV LOG_LEVEL="debug"
COPY --from=base-image $VIRTUAL_ENVIRONMENT_PATH $VIRTUAL_ENVIRONMENT_PATH
# install [tool.poetry.dev-dependencies]
RUN poetry install --no-interaction --no-root
COPY /app /application_root/app/
COPY /tests /application_root/tests/
# image for running pep8 checks
FROM test-base-image as black-test-image
ENTRYPOINT /entrypoints/black_entrypoint.sh $0 $@
CMD ["--target-version py39", "--check", " --line-length 80", "app"]
# image for running unit tests
FROM test-base-image as unit-test-image
ENTRYPOINT /entrypoints/pytest_entrypoint.sh $0 $@
# You need to use pytest-cov as pytest plugin. Makes life very simple.
# tests directory is configured in pyproject.toml
# https://github.com/pytest-dev/pytest-cov
CMD ["--cov=app", "--cov-report=xml:/test_coverage_reports/unit_tests_coverage.xml"]
FROM base-image as development-image
ENV RELOAD="true" \
LOG_LEVEL="debug"
COPY --from=base-image $VIRTUAL_ENVIRONMENT_PATH $VIRTUAL_ENVIRONMENT_PATH
# install [tool.poetry.dev-dependencies]
RUN poetry install --no-interaction --no-root
COPY . /application_root/
FROM base-image as production-image
COPY --from=base-image $VIRTUAL_ENVIRONMENT_PATH $VIRTUAL_ENVIRONMENT_PATH
# This RUN statement fixes an issue while running the tests with GitHub Actions.
# Tests work reliable locally on my machine or running GitHub Actions using act.
# There is a bug with multistage builds in GitHub Actions which I can also reliable reproduce
# see: https://github.com/moby/moby/issues/37965
# Will also check if I can fix that annoying issue with some tweaks to docker build args
# see: https://gist.github.com/UrsaDK/f90c9632997a70cfe2a6df2797731ac8
RUN true
COPY /app /application_root/app/
시'는 '시'는 쓸 수 . 시를 그대로 두면poetry add
VS Code Devcontainer 。
Poety를 하고, Poety로 만들고, Poety로 새로운 ..bashrc
.
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y python3 python3-pip curl
# Use Python 3 for `python`, `pip`
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3 1 \
&& update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
# Install Poetry
RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | python3 -
ENV PATH "$PATH:/root/.local/bin/"
# Install Poetry packages (maybe remove the poetry.lock line if you don't want/have a lock file)
COPY pyproject.toml ./
COPY poetry.lock ./
RUN poetry install --no-interaction
# Provide a known path for the virtual environment by creating a symlink
RUN ln -s $(poetry env info --path) /var/my-venv
# Clean up project files. You can add them with a Docker mount later.
RUN rm pyproject.toml poetry.lock
# Hide virtual env prompt
ENV VIRTUAL_ENV_DISABLE_PROMPT 1
# Start virtual env when bash starts
RUN echo 'source /var/my-venv/bin/activate' >> ~/.bashrc
virtualenv를 피할 필요가 없다는 것을 상기시켜 주세요.퍼포먼스에 영향을 주지 않고 시는 그것 없이 동작하도록 설계되어 있지 않습니다.
@@Davos, @Davos, @Davos, @Davos, @Davos, @Davos, @Davos, @Davos가 없는 한 동작하지 않는다고 합니다.pyproject.toml
★★★★★★★★★★★★★★★★★」poetry.lock
파일. 이 문제를 처리해야 할 경우 이 해결 방법을 사용할 수 있습니다. 이 방법은 파일이 존재하는지 여부에 관계없이 작동해야 합니다.
COPY pyproject.toml* ./
COPY poetry.lock* ./
RUN poetry init --no-interaction; (exit 0) # Does nothing if pyproject.toml exists
RUN poetry install --no-interaction
Python 앱의 Docker file은 다음과 같습니다.
FROM python:3.10-alpine
RUN apk update && apk upgrade
RUN pip install -U pip poetry==1.1.13
WORKDIR /app
COPY . .
RUN poetry export --without-hashes --format=requirements.txt > requirements.txt
RUN pip install -r requirements.txt
EXPOSE 8000
ENTRYPOINT [ "python" ]
CMD ["main.py"]
언급URL : https://stackoverflow.com/questions/53835198/integrating-python-poetry-with-docker
'it-source' 카테고리의 다른 글
Quasar의 라우터에 중첩된 자식으로부터의 부모 트리거 메서드(vue) (0) | 2023.01.13 |
---|---|
브라우저에서 JavaScript의 URL로 이동하는 방법 (0) | 2023.01.13 |
MYSQL: 특정 ID에 대한 다음 100개 및 이전 100개의 ID를 가져옵니다. (0) | 2023.01.13 |
비동기 Javascript 함수를 동기적으로 호출 (0) | 2023.01.13 |
클릭 시 HTML 텍스트 입력의 모든 텍스트 선택 (0) | 2023.01.13 |