poetry项目锁文件docker容器安装

问题描述 投票:0回答:1

我有一个带有诗歌的Python项目,我想将其上传到codeartifact(它就像任何其他Python存储库一样),然后将其安装到docker容器中。我的 python 项目有 pyproject.toml 的依赖项

[tool.poetry.dependencies]
pandas = "^2.1.4"
pytest-mock = "^3.12.0"

^
表示接受更高版本。但一旦我的项目开始工作,我就有了一个 python.lock 文件。这可以防止使用
poetry install
安装更高版本。 现在,当一切正常时,我运行
poetry build
并将库上传到 codefartifact。

如果我想将此库安装到 docker 容器中,我可以运行 pip install 并指定我的库的版本。 我现在的问题是,此安装是否会尊重诗歌.lock 文件?或者要安装最新的依赖项,例如

pandas 2.2.0
如何阻止更新版本?我必须从 pyproject.toml 文件中删除它吗?或者必须将锁定文件复制到容器并运行
poetry install

python docker pypi python-poetry aws-codeartifact
1个回答
0
投票

如果您已运行

poetry build
创建一个包并将该包上传到 codeartifact,则该包现在已准备好由包管理器(例如
pip install
poetry add
)安装,无论“调用者”是否在容器中。

依赖解析如何工作

Pip 和 Poetry 等依赖管理工具将查看项目中每个依赖项的

pypoetry.toml
中指定的依赖项,将它们相互比较,并确定哪些依赖项版本将满足项目(和依赖项要求),而不会导致冲突。

在您的情况下,这意味着安装的 Pandas 版本将根据您的环境和项目中的其他依赖项而变化。

具体例子:

  • 您正在参与 Foo 项目。你做到了
    poetry build
    ,使 Foo 成为一个可安装的包
  • Foo 包中有一个
    pyproject.toml
    ,指定其依赖关系要求
  • 当 Foo 通过 Poetry 或 Pip(等)安装到项目 Bar 中时。 让我们看看我们做了什么
    pip install foo

行为如下: - Pip 查看 Bar 的每个依赖包(以及它们的子依赖包)中的 pyproject.toml 文件 - Pip 确定每个子依赖项可以安装的“最大版本”并且仍然:

满足所有套餐要求
  1. 不要制造冲突
  2. 这些依赖项管理器非常“聪明”,因为它们只会升级依赖项支持的高度。

例如:

您安装依赖于
    bar
  •  的软件包 
    mydep = <=2.0.5
    现在安装依赖于 
  • foo
  •  的软件包 
    mydep = <=2.1.0
    Mydep 将被安装,但仅限于版本 2.0.5。
  • 如何防止更高版本

重要提示:

Pip 和 Poetry 尊重语义版本控制。语义版本控制突出显示了对库的重大更改(公共 API 的更改等),因此依赖项管理器知道“他们可以升级到什么程度”,而不会破坏您的代码。 不建议手动编辑版本要求 - 这就是像 Poetry 这样的依赖管理器的用途! 现在有了这个警告,您可以在需求文件中使用“小于或等于”符号来“锁定”特定版本的依赖项或设置上限。例如。

mydep = <=2.0.5

不会高于 2.0.5,并且

mydep = =2.0.5
将恰好为 2.0.5。
使您的容器依赖项镜像您的本地项目

如果您想让依赖版本遵循

poetry.lock

并完全镜像本地项目中的依赖版本,您可以在容器中安装Poetry,从本地项目复制

poetry.lock
,然后在容器中安装poetry。
这里有一个示例(实际上有几个)

这是如何完成的

© www.soinside.com 2019 - 2024. All rights reserved.