诗歌:如何发布针对多个Python版本的项目包?
Poetry: How to publish project packages targeting multiple Python versions?
我有一个项目我想发布为针对两个Python版本(3.6和3.8)的包 .
我的理解:
- 如何使用
pyenv
. 安装和激活不同的 python 版本
- 如何
poetry
创建对应于所选Python版本的虚拟环境。
- 如何设置
pyproject.toml
以指定 python 版本、管理依赖项以及使用此配置发布包。
我不明白的是:如何为多个 Python 版本发布同一个包?我不可能是唯一一个有这个用例的人吧?
- 是否需要两个
pyproject.toml
文件? (每个 python 版本和一组相应的依赖项...)
- 是否有使用 Poetry 执行此操作的既定方法,或者是否需要其他 tools/workflows?
编辑
进一步挖掘后,我发现这个 https://python-poetry.org/docs/versions/#multiple-constraints-dependencies 看起来可能相关。
以上 link 处的示例。
[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.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
等,这是不正确的。
没有。您不需要创建多个 pyproject.toml
文件或以其他方式为每个 Python 目标版本创建单独的工作流程(至少针对类似版本的特定情况)。
你可以简单地使用依赖语法来表示你想要像这样定位 >=3.6<4.0...
[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"}
...
我有一个项目我想发布为针对两个Python版本(3.6和3.8)的包 .
我的理解:
- 如何使用
pyenv
. 安装和激活不同的 python 版本
- 如何
poetry
创建对应于所选Python版本的虚拟环境。 - 如何设置
pyproject.toml
以指定 python 版本、管理依赖项以及使用此配置发布包。
我不明白的是:如何为多个 Python 版本发布同一个包?我不可能是唯一一个有这个用例的人吧?
- 是否需要两个
pyproject.toml
文件? (每个 python 版本和一组相应的依赖项...) - 是否有使用 Poetry 执行此操作的既定方法,或者是否需要其他 tools/workflows?
编辑
进一步挖掘后,我发现这个 https://python-poetry.org/docs/versions/#multiple-constraints-dependencies 看起来可能相关。
以上 link 处的示例。
[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.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
等,这是不正确的。
没有。您不需要创建多个 pyproject.toml
文件或以其他方式为每个 Python 目标版本创建单独的工作流程(至少针对类似版本的特定情况)。
你可以简单地使用依赖语法来表示你想要像这样定位 >=3.6<4.0...
[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"}
...