我有一个带有 Poetry 的 Python 项目,我想将其上传到 CodeArtifact(像任何其他 Python 存储库一样),然后将其安装到 Docker 容器中。我的 Python 项目在
pyproject.toml
中具有依赖项
[tool.poetry.dependencies]
pandas = "^2.1.4"
pytest-mock = "^3.12.0"
^
表示接受更高版本。但一旦我的项目开始工作,我也会有一个 poetry.lock
文件。这可以防止使用 poetry install
安装更高版本。
现在,当一切正常时,我运行 poetry build
并将库上传到 CodeArtifact。
如果我想将此库安装到 Docker 容器中,我可以运行
pip install
并指定我的库的版本。
我现在的问题是:
poetry.lock
文件?或者它会安装最新的依赖项,例如pandas 2.2.0
poetry install
?如果您已运行
poetry build
创建一个包并将该包上传到 codeartifact,则该包现在已准备好由包管理器(例如 pip install
或 poetry add
)安装,无论“调用者”是否在容器中。
如果您想让依赖版本遵循
poetry.lock
并完全镜像本地项目中的依赖版本,您可以在容器中安装Poetry,从本地项目复制poetry.lock
,然后在容器中安装poetry。
这里有一个示例(实际上有几个)这是如何完成的。
Pip 和 Poetry 等依赖管理工具将查看项目中每个依赖项的
pyproject.toml
中指定的依赖项,将它们相互比较,并确定哪些依赖项版本将满足项目(和依赖项要求),而不会导致冲突。
在您的情况下,这意味着安装的 Pandas 版本将根据您的环境和项目中的其他依赖项而变化。
poetry build
,使 Foo 成为一个可安装的包pyproject.toml
,指定其依赖关系要求pip install foo
行为如下:
例如:
bar
的软件包 mydep = <=2.0.5
qux
的软件包 mydep = <=2.1.0
重要提示:Pip 和 Poetry 尊重语义版本控制。语义版本控制突出显示了对库的重大更改(公共 API 的更改等),因此依赖项管理器知道“他们可以升级到什么程度”,而不会破坏您的代码。 不建议手动编辑版本要求 - 这就是像 Poetry 这样的依赖管理器的用途!
现在有了这个警告,您可以在需求文件中使用“小于或等于”符号来“锁定”特定版本的依赖项或设置上限。例如。mydep = <=2.0.5
将不高于 2.0.5,而
mydep = =2.0.5
将恰好为 2.0.5。