我有 一个项目我想发布为针对 两个 Python 版本(3.6 和 3.8)的包。
我的理解:
pyenv
安装和激活不同的Python版本。poetry
创建与所选 Python 版本相对应的虚拟环境。pyproject.toml
来指定 python 版本、管理依赖项并使用此配置发布包。我不明白的是:如何为多个 Python 版本发布同一个包?我不可能是唯一拥有此用例的人,对吗?
pyproject.toml
文件吗? (每个 python 版本和一组相应的依赖项都有一个......)做了更多挖掘,我发现了这个 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"}
要去实验一下,看看这是否有效。
不。您不需要创建多个
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"}
...
您的
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
等,这是不正确的。