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

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

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

我的理解:

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

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

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

编辑

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

这是上面链接中的示例。

[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"}

要去实验一下,看看这是否有效。

python-packaging python-poetry
2个回答
2
投票

不。您不需要创建多个

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

您可以简单地使用依赖语法来表示您想要的目标> = 3.6<4.0 like this...

[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"}
...

0
投票

您的

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.9
3.10
等,这是不正确的。

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