使用不同的包源进行开发与使用 Poetry 进行部署

lia*_*nan 5 python-poetry

使用 Poetry 时,在本地开发时允许使用本地可编辑版本的包,以及在部署时在存储库中使用已发布版本的包的最佳实践是什么?

我正在开发一个项目,该项目使用自行开发的Python包和诗歌进行依赖管理。在本地开发时,我想使用带有该标志安装的本地版本的软件包,--editable以便我可以轻松进行更改。但是,当我部署项目时,我想从私人管理的存储库安装该包。

目前,我似乎可以选择其中之一。我设置了两个可选的依赖项组,privatelocal-private,并包含了私人存储库的补充源。我的pyproject.toml看起来像这样:

[tool.poetry.group.local-private]
optional = true

[tool.poetry.group.local-private.dependencies]
my-package = {path = "../my-package"}


[tool.poetry.group.private]
optional = true

[tool.poetry.group.private.dependencies]
my-package = {version = "^0.2.0", source = "private_repo"}


[[tool.poetry.source]]
name = "private_repo"
url = "https://myprivaterepo.com"
priority = "supplemental"


[[tool.poetry.source]]
name = "PyPI"
priority = "primary"
Run Code Online (Sandbox Code Playgroud)

然而,似乎因为这些包共享相同的名称,所以它们在poetry.lock文件中获得一个条目。因此,当我安装任一组时,my-package两者都是从同一源拉取的。

我知道诗歌可以解决所有依赖关系,无论它们是否属于可选组。但是有没有办法为一个包指定两个不同的源,或者我的做法完全错误吗?

编辑/解决方法: 解决方法,这并不是一个真正正确的解决方法,我最终得到的是使用 pip 单独安装本地包。所以我的pyproject.toml文件看起来像这样:

[tool.poetry.group.private]
optional = true

[tool.poetry.group.private.dependencies]
my-package = {version = "^0.2.0", source = "private_repo"}


[[tool.poetry.source]]
name = "private_repo"
url = "https://myprivaterepo.com"
priority = "supplemental"


[[tool.poetry.source]]
name = "PyPI"
priority = "primary"
Run Code Online (Sandbox Code Playgroud)

然后我有一个private-requirements.txt像这样的单独文件:

-e ../my-local-package
Run Code Online (Sandbox Code Playgroud)

本地安装时,我运行poetry install然后pip install -r private-requirements.txt. 在部署期间安装时,我运行poetry install --with private.

这并不是真正的修复,因为诗歌不会在本地解决my-local-package我的包和其余包之间的依赖关系。除了这个潜在的陷阱之外,这也是有效的。