A pyproject.toml
conversion tool for Poetry to uv migration.
pip install bukowski
# or
uv pip install bukowski
$ bukowski --help
Usage: bukowski [OPTIONS] [PATH]
╭─ Arguments ──────────────────────────────────────────────────────────────────╮
│ path [PATH] path to pyproject.toml [default: pyproject.toml] │
╰──────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────╮
│ --force-overwrite -f Whether to overwrite the existing │
│ pyproject.toml file or not │
│ --install-completion Install completion for the current shell. │
│ --show-completion Show completion for the current shell, to │
│ copy it or customize the installation. │
│ --help Show this message and exit. │
╰──────────────────────────────────────────────────────────────────────────────╯
For example, let's say you have the following pyproject.toml
:
[tool.poetry]
name = "foo"
version = "0.1.0"
description = "bar"
authors = ["John Smith <johnsmith@example.org>"]
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.10"
fastapi = { extras = ["all"], version = "^0.112.2" }
requests = "2.32.3"
[tool.poetry.group.dev.dependencies]
pytest = "^8.3.2"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
bukowski /path/to/pyproject.toml
converts it (outputs it to stdout when -f
options is not set, otherwise overwrites the path) as follows:
[project]
name = "foo"
version = "0.1.0"
description = "bar"
readme = "README.md"
requires-python = ">=3.10,<4.0"
license = ""
authors = [
{ name = "John Smith", email = "johnsmith@example.org" },
]
dependencies = [
"fastapi[all]>=0.112.2,<0.113.0",
"requests==2.32.3",
]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.uv]
dev-dependencies = [
"pytest>=8.3.2,<9.0.0",
]
Then you can do uv sync
with the new pyproject.toml
.
packages
(tool.poetry.packages
) is not supported.source
(tool.poetry.source
) is supported, but the conversion may be lossy.