【问题标题】:How do I integrate pyenv, poetry, and docker?如何集成 pyenv、诗歌和 docker?
【发布时间】:2021-04-22 09:52:40
【问题描述】:

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

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

【问题讨论】:

  • @sinoroc 呃好吧 pyenv 呢?
  • 我不知道。我认为容器中不需要 pyenv 。从我个人的角度来看,我也不认为你需要容器​​中的 poetry 。 -- 我的意思是,对于 stackoverflow 来说,这是一个离题的问题,因为所有答案都将非常基于个人意见。
  • @sinoroc 我只是使用 pyenv,因为有时默认系统 python 不是最新的。
  • @sinoroc 和诗歌是包管理器

标签: docker package python-packaging pyenv python-poetry


【解决方案1】:

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

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" ]

另见this post

为什么要使用 pyenv

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

为什么要写诗

Poetry 只是另一种管理依赖项的巧妙方法,尽管替代方法是 Pipfile;或者只是使用 requirements.txt 的 virtualenv。

【讨论】:

  • A. 有特定 Python 版本的 Docker 镜像,而不是 apt-installing 东西:hub.docker.com/_/python -- B. 我建议避免在 docker 容器中安装 poetry。很多可能性。 1. 将是容器外的poetry export,然后是容器内的python -m pip install -r requirements.txt2. 将在容器外部创建 wheels 并在容器内部创建 python -m pip install --no-index wheels/*.whl
  • @sinoroc 是的,我忘记了。也就是说,如果 Debian 或 Alpine 就足够了。或者,如果您在该图像中仅使用 Python。如你所见,我还安装了 MeCab,一个原生的 dep。
猜你喜欢
  • 2019-05-18
  • 2022-08-12
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 2022-10-21
  • 2022-01-11
  • 2022-01-26
  • 1970-01-01
相关资源
最近更新 更多