加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

将Python诗歌与Docker集成

发布时间:2020-12-20 12:14:54 所属栏目:Python 来源:网络整理
导读:你能给我一个Dockerfile的例子,我可以在其中将poetry.lock和pyproject.toml所需的所有软件包安装到Docker的图像/容器中吗? 解决方法 将诗歌与码头一起使用时,有几点需要注意. 安装 安装诗歌的官方方式是: curl -sSL https://raw.githubusercontent.com/sdi
你能给我一个Dockerfile的例子,我可以在其中将poetry.lock和pyproject.toml所需的所有软件包安装到Docker的图像/容器中吗?

解决方法

将诗歌与码头一起使用时,有几点需要注意.

安装

安装诗歌的官方方式是:

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

这种方式允许诗歌及其依赖关系与您的依赖关系隔离.但是,在我看来,出于两个原因,这不是一件好事:

>诗歌版本可能会得到更新,它会打破你的构建.在这种情况下,您可以指定POETRY_VERSION环境变量.安装人员会尊重它
>我不喜欢将内容从互联网传输到我的容器中的想法,没有任何可能的文件修改保护

所以,我使用pip install’poetry == $POETRY_VERSION’.如您所见,我仍然建议您固定您的版本.

另外,将此版本固定在pyproject.toml中:

[build-system]
# Should be the same as `$POETRY_VERSION`:
requires = ["poetry==0.12.11"]
build-backend = "poetry.masonry.api"

它将保护您免受本地和泊坞窗环境之间版本不匹配的影响.

缓存依赖项

我们希望缓存我们的要求,只在pyproject.toml或poetry.lock文件更改时重新安装它们.否则构建将会很慢.要实现工作缓存层,我们应该:

COPY poetry.lock pyproject.toml /code/

安装诗歌之后,但在添加任何其他文件之前.

VIRTUALENV

接下来要记住的是virtualenv创作.我们在码头工具中不需要它.它已经被孤立了.因此,我们使用诗歌配置settings.virtualenvs.create false设置将其关闭.

发展与生产

如果您像我一样使用相同的Dockerfile进行开发和生产,则需要根据某些环境变量安装不同的依赖关系集:

poetry install $(test "$YOUR_ENV" == production && echo "--no-dev")

这样$YOUR_ENV将控制将安装哪些依赖项集:all(默认)或仅使用–no-dev标志生成.

您可能还想添加更多选项以获得更好的体验:

> –no-interaction不要问任何互动问题
> –no-ansi flag使您的输出更友好

结果

你最终会得到类似的东西:

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=0.12.11

# 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 settings.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

你可以在这里找到一个完全正常的实际例子:wemake-django-template

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读