如何集成 pyenv、poetry 和 docker?

Cra*_*mer 5 package docker pyenv python-packaging python-poetry

注意:我刚刚开始尝试学习docker,所以我是一个初学者

目前,我正在使用诗歌和 pyenv 来制作我的 python 项目。我使用 pyenv 作为我的 python 版本,并使用诗歌来创建和管理我的 python 项目。但是,我也想使用 docker。那么,我怎样才能将这三个集成到一个Python项目中呢?

Pol*_*olv 6

这并不是一个完美的解决方案,但我做到了。

FROM debian:buster-slim

RUN apt-get update
RUN apt-get install -y --no-install-recommends make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

ENV HOME="/root"
WORKDIR ${HOME}
RUN apt-get install -y git
RUN git clone --depth=1 https://github.com/pyenv/pyenv.git .pyenv
ENV PYENV_ROOT="${HOME}/.pyenv"
ENV PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/bin:${PATH}"

ENV PYTHON_VERSION=3.8.6
RUN pyenv install ${PYTHON_VERSION}
RUN pyenv global ${PYTHON_VERSION}

RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -

WORKDIR /app

RUN apt-get install -y mecab-ipadic-utf8
RUN touch /usr/local/etc/mecabrc

COPY poetry.lock pyproject.toml ./
RUN /bin/bash -c 'source $HOME/.poetry/env && POETRY_VIRTUALENVS_IN_PROJECT=true poetry install --no-dev --no-root'

COPY . .

ENTRYPOINT [ "/bin/bash", "-c", "source .venv/bin/activate && uvicorn server:app --host=0.0.0.0" ]
Run Code Online (Sandbox Code Playgroud)

另请参阅这篇文章

为什么使用 pyenv

显然,apt-get install python3安装了 python 3.7,它也是不完整的(没有 distutil)。您甚至无法固定.python-version到 3.8 或 3.9 或 conda;这可能会在一个方面出错,但在另一个方面不会出错。

为何诗歌

Poetry 只是另一种管理依赖关系的巧妙方法,尽管替代方法是 Pipfile;或者只是 virtualenv 与requirements.txt.

  • ***A.*** 有特定 Python 版本的 Docker 镜像,而不是 _apt-installing_ 东西:https://hub.docker.com/_/python/ -- ***B.*** 我会建议避免在 docker 容器中安装 _poetry_ 。很多可能性。***1.*** 将是容器外部的“poetry export”,然后是容器内部的“python -m pip install -rrequirements.txt”。***2.*** 将在容器外部创建 _wheels_ 并在容器内部创建 `python -m pip install --no-indexwheels/*.whl`。 (4认同)