mcpField
P
python-packaging

python-packaging

github.com/laurigates开发59308 次安装今天更新
代码仓库

关于 python-packaging

面向使用 uv 和现代构建工具构建、发布 Python 包的开发者速查指南。内容包括包元数据、构建配置、版本管理、入口点,以及发布到 PyPI 或私有索引。

主要功能

  1. 01构建 wheel 和 sdist
  2. 02发布到 PyPI 或私有索引
  3. 03配置包元数据和构建系统
  4. 04设置版本与入口点
  5. 05支持可编辑安装

适用场景

  1. 01为发布构建分发文件
  2. 02将包发布到 PyPI
  3. 03配置包的控制台命令
  4. 04设置包版本和构建后端

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/laurigates/claude-plugins --skill python-packaging

安装后在 Claude Code 中输入/python-packaging确认已加载。

附带文件REFERENCE.md

详细介绍

Python 打包

使用 UV 和现代构建工具构建并发布 Python 包的快速参考。

何时使用此技能

在以下情况下使用此技能……在以下情况下改用 uv-project-management……
使用 uv build 构建 wheel/sdist 并分发到 PyPI设置新项目的 pyproject.toml 或添加运行时依赖项
使用 uv publish 发布版本到 PyPI 或私有索引管理锁文件或同步本地虚拟环境
配置用于分发的入口点、控制台脚本或包元数据解决依赖冲突或为开发固定版本

此技能的适用场景

  • 构建 Python 包(wheel、sdist)
  • 发布到 PyPI 或私有索引
  • 包版本管理
  • 构建系统配置
  • 可编辑安装

快速参考

构建包
# Build package
uv build

# Build specific formats
uv build --wheel
uv build --sdist

# Output location: dist/
发布
# Publish to PyPI
uv publish

# With token
uv publish --token $PYPI_TOKEN

# To Test PyPI
uv publish --publish-url https://test.pypi.org/legacy/
包结构
my-package/
├── pyproject.toml
├── README.md
├── LICENSE
├── src/
│   └── my_package/
│       ├── __init__.py
│       ├── __version__.py
│       └── main.py
└── tests/

pyproject.toml 配置

[project]
name = "my-package"
version = "0.1.0"
description = "A great package"
readme = "README.md"
requires-python = ">=3.11"
license = {text = "MIT"}
authors = [
    {name = "Your Name", email = "[email protected]"}
]
keywords = ["python", "package"]
classifiers = [
    "Development Status :: 4 - Beta",
    "Intended Audience :: Developers",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.11",
]

dependencies = [
    "requests>=2.31.0",
]

[project.optional-dependencies]
dev = ["pytest", "ruff", "ty"]

[project.urls]
Homepage = "https://github.com/user/my-package"
Documentation = "https://my-package.readthedocs.io"
Repository = "https://github.com/user/my-package.git"
Issues = "https://github.com/user/my-package/issues"

[project.scripts]
my-cli = "my_package.cli:main"

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

版本管理

[project]
version = "0.1.0"  # Manual versioning

# Dynamic versioning (from git tags)
dynamic = ["version"]

[tool.uv]
version-provider = "git"

入口点

[project.scripts]
my-cli = "my_package.cli:main"

[project.gui-scripts]
my-gui = "my_package.gui:main"

[project.entry-points."my_plugin"]
plugin1 = "my_package.plugins:plugin1"

构建后端

UV 构建(默认)
[build-system]
requires = ["uv_build>=0.9.2,<0.10.0"]
build-backend = "uv_build"
Setuptools
[build-system]
requires = ["setuptools>=68", "wheel"]
build-backend = "setuptools.build_meta"
Hatchling
[build-system]
requires = ["hatchling>=1.18"]
build-backend = "hatchling.build"

常见工作流

发布到 PyPI
# 1. Build
uv build

# 2. Check built packages
ls dist/

# 3. Publish
uv publish --token $PYPI_TOKEN
先在 Test PyPI 上测试
# Publish to Test PyPI
uv publish --publish-url https://test.pypi.org/legacy/ \
           --token $TEST_PYPI_TOKEN

# Test installation
pip install --index-url https://test.pypi.org/simple/ my-package

包分类器

常见分类器:

classifiers = [
    # Development Status
    "Development Status :: 3 - Alpha",
    "Development Status :: 4 - Beta",
    "Development Status :: 5 - Production/Stable",

    # Audience
    "Intended Audience :: Developers",
    "Intended Audience :: Science/Research",

    # License
    "License :: OSI Approved :: MIT License",

    # Python Versions
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",

    # Framework
    "Framework :: Django",
    "Framework :: FastAPI",

    # Topic
    "Topic :: Software Development :: Libraries",
    "Topic :: Scientific/Engineering",
]

完整列表:https://pypi.org/classifiers/

另请参阅

  • uv-project-management - 项目设置和依赖项
  • python-development - Python 核心模式
  • uv-workspaces - 构建工作区包

参考资料

评论

支持 Markdown