你能给我一个 Dockerfile
的例子,我可以从 poetry.lock
和 pyproject.toml
安装我需要的所有包到我的镜像/容器中吗?
原文由 Alex Bodea 发布,翻译遵循 CC BY-SA 4.0 许可协议
你能给我一个 Dockerfile
的例子,我可以从 poetry.lock
和 pyproject.toml
安装我需要的所有包到我的镜像/容器中吗?
原文由 Alex Bodea 发布,翻译遵循 CC BY-SA 4.0 许可协议
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
使用
poetry
和docker
时,有几件事情要记住。安装
安装
poetry
的官方方法是通过:这种方式允许
poetry
及其依赖项与您的依赖项隔离。但是,在我看来,这不是一件好事,原因有两个:poetry
版本可能会得到更新,它会破坏你的构建。在这种情况下,您可以指定POETRY_VERSION
环境变量。安装人员会尊重它所以,我使用
pip install 'poetry==$POETRY_VERSION'
。如您所见,我仍然建议固定您的版本。此外,将此版本固定在您的
pyproject.toml
中:它将保护您免受本地环境和
docker
环境之间的版本不匹配。缓存依赖项
我们想要缓存我们的需求,并且仅在
pyproject.toml
或poetry.lock
文件更改时重新安装它们。否则构建会很慢。为了实现工作缓存层,我们应该把:在安装
poetry
之后,但在添加任何其他文件之前。虚拟环境
接下来要记住的是
virtualenv
创建。我们在docker
中不需要它。它已经被隔离了。因此,我们使用poetry config virtualenvs.create false
设置将其关闭。开发与生产
如果您像我一样对开发和生产使用相同的
Dockerfile
,您将需要根据一些环境变量安装不同的依赖项集:这样
$YOUR_ENV
将控制将安装哪些依赖项集:所有(默认)或仅使用--no-dev
标志的生产。您可能还想添加更多选项以获得更好的体验:
--no-interaction
不问任何互动问题--no-ansi
标记使您的输出对日志更友好结果
你最终会得到类似的东西:
您可以在这里找到一个完整的真实示例: wemake-django-template
2019-12-17 更新
poetry
到 1.0