诗:如何发布针对多个Python版本的项目包?

con*_*xyz 5 python-packaging python-poetry

我有一个项目想要发布为针对两个 Python 版本(3.6 和 3.8)的包。

我的理解是:

  • 如何使用pyenv.
  • 如何poetry创建与所选 Python 版本相对应的虚拟环境。
  • 如何设置pyproject.toml以指定 python 版本、管理依赖项以及使用此配置发布包。

我不明白的是:如何为多个 Python 版本发布同一个包?我不可能是唯一一个拥有此用例的人,对吗?

  • 需要两个pyproject.toml文件吗?(每个 python 版本和一组相应的依赖项都有一个......)
  • 是否有既定的方法可以用 Poetry 来做到这一点,或者是否需要其他工具/工作流程?

编辑

做了更多的挖掘,我发现这个https://python-poetry.org/docs/dependency-specation/#multiple-constraints-dependencies看起来可能是相关的。

这是上面链接中的示例。

[tool.poetry.dependencies]
foo = [
    {version = "<=1.9", python = "^2.7"},
    {version = "^2.0", python = "^3.4"}
]
Run Code Online (Sandbox Code Playgroud)

poetry add我还发现你可以使用这样指定Python版本...

poetry add cleo --python 3.6.10
Run Code Online (Sandbox Code Playgroud)

这会像这样添加依赖项pyproject.toml......

cleo = {version = "^0.8.1", python = "3.6.10"}
Run Code Online (Sandbox Code Playgroud)

要去尝试一下,看看这是否有效。

con*_*xyz 2

不需要。您不需要创建多个pyproject.toml文件或以其他方式为您要定位的每个 Python 版本创建单独的工作流程(至少对于针对类似版本的特定情况)。

您可以简单地使用依赖语法来表示您想要像这样定位 >=3.6<4.0...

[tool.poetry.dependencies]
python = '^3.6'
Run Code Online (Sandbox Code Playgroud)

然后类似地添加依赖项......

poetry add <dependency> python ^3.6
Run Code Online (Sandbox Code Playgroud)

结果是这样的......

[tool.poetry.dependencies]
python = '^3.6'
cleo = {version = "^0.8.1", python = "^3.6"}
pyyaml = {version = "^5.4.1", python = "^3.6"}
...
Run Code Online (Sandbox Code Playgroud)

这很有效,尽管我进一步降低了一些依赖项的具体程度,以避免某些主机上的不兼容。

pyyaml = {version = "^5.0", python = "^3.6"}
...
Run Code Online (Sandbox Code Playgroud)