【问题标题】:Poetry: How to publish project packages targeting multiple Python versions?诗歌:如何发布针对多个 Python 版本的项目包?
【发布时间】:2021-05-02 20:50:46
【问题描述】:

我有一个项目我想以包的形式发布,目标是两个 Python 版本(3.6 和 3.8)

我的理解:

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

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

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

编辑

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

这是上面链接中的示例。

[tool.poetry.dependencies]
foo = [
    {version = "<=1.9", python = "^2.7"},
    {version = "^2.0", python = "^3.4"}
]

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

poetry add cleo --python 3.6.10

像这样在pyproject.toml 中添加依赖项...

cleo = {version = "^0.8.1", python = "3.6.10"}

去试验看看是否可行。

【问题讨论】:

  • 你的pyproject.toml现在怎么样了?
  • [tool.poetry.dependencies] python = "^3.8" cleo = "^0.8.1" ... [tool.poetry.dev-dependencies] pytest = "^5.4.3" 。 ..

标签: python-packaging python-poetry


【解决方案1】:

您的pyproject.toml 中可能需要类似的内容:

[tool.poetry.dependencies]
python = '3.6 || 3.8'

但我不确定确切的符号,它有点模糊。

它似乎生成了一个setup.py,内容如下:

'>=3.6, !=2.7.*, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.7.*'

所以这将包括3.93.10 等,这是不正确的。

【讨论】:

【解决方案2】:

没有。您无需创建多个 pyproject.toml 文件或以其他方式为您所针对的每个 Python 版本创建单独的工作流(对于这种特定情况,至少针对类似版本)。

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

[tool.poetry.dependencies]
python = '^3.6'

然后同样添加依赖...

poetry add <dependency> python ^3.6

这会导致这样的事情......

[tool.poetry.dependencies]
python = '^3.6'
cleo = {version = "^0.8.1", python = "^3.6"}
pyyaml = {version = "^5.4.1", python = "^3.6"}
...

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

pyyaml = {version = "^5.0", python = "^3.6"}
...

【讨论】:

    猜你喜欢
    • 2021-10-31
    • 1970-01-01
    • 2022-11-16
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 2020-05-05
    相关资源
    最近更新 更多