返回 Skill 列表
extension
分类: 开发与工程无需 API Key

setup-to-pyproject

将Python项目从setup.py/setup.cfg迁移到pyproject.toml以便与uv一起使用。在升级旧版Python打包、将setup.py转换为现代的pyproject.toml格式、设置开发/测试依赖组以及确保`uv run pytest`正确工作时使用。

person作者: jakexiaohubgithub

Setup.py to pyproject.toml Migration for uv

Migrate legacy Python packaging to modern pyproject.toml with uv compatibility.

Core Structure

[project]
name = "package-name"
version = "0.1.0"
description = "Package description"
readme = "README.md"
requires-python = ">=3.10"
dependencies = [
    "requests>=2.28",
]
license = "Apache-2.0"

[project.urls]
Homepage = "https://github.com/user/repo"
Changelog = "https://github.com/user/repo/releases"
Issues = "https://github.com/user/repo/issues"
CI = "https://github.com/user/repo/actions"

[dependency-groups]
dev = [
    "pytest>=9.0",
    "black>=25.12.0",
]

[build-system]
requires = ["uv_build>=0.9.18,<0.10.0"]
build-backend = "uv_build"

Key Migration Steps

1. Extract metadata from setup.py

Map setup() arguments to [project] table:

  • namename
  • versionversion
  • descriptiondescription
  • long_descriptionreadme (use filename)
  • author + author_emailauthors = [{name = "...", email = "..."}]
  • urlproject.urls.Homepage
  • python_requiresrequires-python
  • install_requiresdependencies
  • entry_points.console_scripts[project.scripts]

2. Set up dependency-groups for dev dependencies

Critical for uv run pytest to work:

[dependency-groups]
dev = [
    "pytest>=9.0",
    "black>=25.12.0",
]

3. Confirm it works with uv run

Then run tests with:

uv run pytest

The dev group will be picked up automatically by uv run.

4. Confirm it works with uv build

Test that building the package works correctly:

uv build

uv_build defaults to src/ layout. For flat layout (package directory at project root), add:

[tool.uv.build-backend]
module-root = ""

Files to Delete After Migration

  • setup.py
  • setup.cfg
  • MANIFEST.in (usually, unless complex includes)
  • requirements.txt / requirements-dev.txt (optional, uv manages these)