使用 Docker 和 Python 诗歌?
Using Docker with Python Poetry?
我一直在使用 Docker 和 pipenv 进行数据科学部署设置,现在我想改用 Poetry。我的 Docker 文件是:
FROM python:3.8-alpine3.13
ENV POETRY_VIRTUALENVS_CREATE=false \
POETRY_VERSION=1.1.11
RUN apk add --no-cache python3-dev gcc libc-dev musl-dev openblas gfortran build-base postgresql-libs postgresql-dev libffi-dev \
&& pip install poetry
COPY pyproject.toml poetry.lock ./
RUN poetry export -f requirements.txt --output requirements.txt && sed -i 's/^-e //' requirements.txt
USER root
RUN apt-get update && apt-get install -y --no-install-recommends python3-dev gcc libc-dev musl-dev openssh-client git libpq-dev \
&& apt-get clean -y
# install dependencies from requirements.txt
RUN pip install --no-cache-dir --user -r requirements.txt
COPY . .
CMD ["jupyter", "notebook", "--port=8888", "--no-browser", "--ip=0.0.0.0", "--allow-root"]
我的pyproject.toml
:
[tool.poetry]
name = ""
version = "1.0.0"
description = ""
authors = [""]
[tool.poetry.dependencies]
python = "^3.8"
... # lots of libraries, omitted here
[tool.poetry.dev-dependencies]
black = "*"
ipykernel = "6.*"
ipython = "7.*"
isort = "5.*"
jupyter = "*"
pytest = "6.*"
pre-commit = "2.*"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
这是基于我在 Whosebug 上找到的其他 Docker 文件。我运行遇到以下问题:
Step 7/10 : RUN apt-get update && apt-get install -y --no-install-recommends python3-dev gcc libc-dev musl-dev openssh-client git libpq-dev && apt-get clean -y
---> Running in 447ffb83d555
/bin/sh: apt-get: not found
The command '/bin/sh -c apt-get update && apt-get install -y --no-install-recommends python3-dev gcc libc-dev musl-dev openssh-client git libpq-dev && apt-get clean -y' returned a non-zero code: 127
Running containerdocker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "jupyter": executable file not found in $PATH: unknown.
ERRO[0000] error waiting for container: context canceled
make: *** [Makefile:6: jupyter_notebook] Error 127
所以这看起来好像没有使用 Poetry,其中安装了 Jupyter,因此找不到。我该如何解决这个问题?
这不是 poetry 的问题,而是因为您正尝试在 alpine 图像(不包括 apt-get
)中使用 apt-get
安装软件包。您还多次安装了一些软件包,因为您首先使用 apk,然后使用 apt-get。
此外,您不需要安装 python,因为您使用 python 图像作为基础。
我还建议只使用 poetry 进行安装,而不是转储到 requirements.txt 并使用官方安装程序安装 poetry。由于不支持 python 3.8,因此您还必须增加 python。
看看这个结合 docker 和诗歌的答案:Integrating Python Poetry with Docker
您的 Dockerfile 可能如下所示:
FROM python:3.9-alpine3.13
ENV POETRY_VIRTUALENVS_CREATE=false \
POETRY_VERSION=1.1.11 \
YOUR_ENV=development
RUN apk add --no-cache python3-dev gcc libc-dev musl-dev openblas gfortran build-base postgresql-libs postgresql-dev libffi-dev curl
RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | python -
ENV PATH "/root/.local/bin:$PATH"
# install dependencies
COPY pyproject.toml poetry.lock ./
RUN poetry install $(test "$YOUR_ENV" == production && echo "--no-dev") --no-interaction --no-ansi
COPY . .
CMD ["jupyter", "notebook", "--port=8888", "--no-browser", "--ip=0.0.0.0", "--allow-root"]
根据 Asgeer 的回答,我设法修复了 Dockerfile。然而,事实证明使用 Alpine 是不可能的,最终的解决方案是:
FROM jupyter/scipy-notebook:latest
ENV POETRY_VIRTUALENVS_CREATE=false \
POETRY_VERSION=1.1.11
USER root
RUN apt-get update \
&& apt-get --yes install apt-utils \
&& apt-get --yes install curl
RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | python -
ENV PATH "/home/jovyan/.local/bin:$PATH"
# install dependencies
COPY pyproject.toml poetry.lock ./
RUN poetry install --no-interaction --no-ansi
COPY . .
CMD ["jupyter", "notebook", "--port=8888", "--no-browser", "--ip=0.0.0.0", "--allow-root"]
我一直在使用 Docker 和 pipenv 进行数据科学部署设置,现在我想改用 Poetry。我的 Docker 文件是:
FROM python:3.8-alpine3.13
ENV POETRY_VIRTUALENVS_CREATE=false \
POETRY_VERSION=1.1.11
RUN apk add --no-cache python3-dev gcc libc-dev musl-dev openblas gfortran build-base postgresql-libs postgresql-dev libffi-dev \
&& pip install poetry
COPY pyproject.toml poetry.lock ./
RUN poetry export -f requirements.txt --output requirements.txt && sed -i 's/^-e //' requirements.txt
USER root
RUN apt-get update && apt-get install -y --no-install-recommends python3-dev gcc libc-dev musl-dev openssh-client git libpq-dev \
&& apt-get clean -y
# install dependencies from requirements.txt
RUN pip install --no-cache-dir --user -r requirements.txt
COPY . .
CMD ["jupyter", "notebook", "--port=8888", "--no-browser", "--ip=0.0.0.0", "--allow-root"]
我的pyproject.toml
:
[tool.poetry]
name = ""
version = "1.0.0"
description = ""
authors = [""]
[tool.poetry.dependencies]
python = "^3.8"
... # lots of libraries, omitted here
[tool.poetry.dev-dependencies]
black = "*"
ipykernel = "6.*"
ipython = "7.*"
isort = "5.*"
jupyter = "*"
pytest = "6.*"
pre-commit = "2.*"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
这是基于我在 Whosebug 上找到的其他 Docker 文件。我运行遇到以下问题:
Step 7/10 : RUN apt-get update && apt-get install -y --no-install-recommends python3-dev gcc libc-dev musl-dev openssh-client git libpq-dev && apt-get clean -y
---> Running in 447ffb83d555
/bin/sh: apt-get: not found
The command '/bin/sh -c apt-get update && apt-get install -y --no-install-recommends python3-dev gcc libc-dev musl-dev openssh-client git libpq-dev && apt-get clean -y' returned a non-zero code: 127
Running containerdocker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "jupyter": executable file not found in $PATH: unknown.
ERRO[0000] error waiting for container: context canceled
make: *** [Makefile:6: jupyter_notebook] Error 127
所以这看起来好像没有使用 Poetry,其中安装了 Jupyter,因此找不到。我该如何解决这个问题?
这不是 poetry 的问题,而是因为您正尝试在 alpine 图像(不包括 apt-get
)中使用 apt-get
安装软件包。您还多次安装了一些软件包,因为您首先使用 apk,然后使用 apt-get。
此外,您不需要安装 python,因为您使用 python 图像作为基础。
我还建议只使用 poetry 进行安装,而不是转储到 requirements.txt 并使用官方安装程序安装 poetry。由于不支持 python 3.8,因此您还必须增加 python。
看看这个结合 docker 和诗歌的答案:Integrating Python Poetry with Docker
您的 Dockerfile 可能如下所示:
FROM python:3.9-alpine3.13
ENV POETRY_VIRTUALENVS_CREATE=false \
POETRY_VERSION=1.1.11 \
YOUR_ENV=development
RUN apk add --no-cache python3-dev gcc libc-dev musl-dev openblas gfortran build-base postgresql-libs postgresql-dev libffi-dev curl
RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | python -
ENV PATH "/root/.local/bin:$PATH"
# install dependencies
COPY pyproject.toml poetry.lock ./
RUN poetry install $(test "$YOUR_ENV" == production && echo "--no-dev") --no-interaction --no-ansi
COPY . .
CMD ["jupyter", "notebook", "--port=8888", "--no-browser", "--ip=0.0.0.0", "--allow-root"]
根据 Asgeer 的回答,我设法修复了 Dockerfile。然而,事实证明使用 Alpine 是不可能的,最终的解决方案是:
FROM jupyter/scipy-notebook:latest
ENV POETRY_VIRTUALENVS_CREATE=false \
POETRY_VERSION=1.1.11
USER root
RUN apt-get update \
&& apt-get --yes install apt-utils \
&& apt-get --yes install curl
RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | python -
ENV PATH "/home/jovyan/.local/bin:$PATH"
# install dependencies
COPY pyproject.toml poetry.lock ./
RUN poetry install --no-interaction --no-ansi
COPY . .
CMD ["jupyter", "notebook", "--port=8888", "--no-browser", "--ip=0.0.0.0", "--allow-root"]