关于 python-packaging
面向使用 uv 和现代构建工具构建、发布 Python 包的开发者速查指南。内容包括包元数据、构建配置、版本管理、入口点,以及发布到 PyPI 或私有索引。
主要功能
- 01构建 wheel 和 sdist
- 02发布到 PyPI 或私有索引
- 03配置包元数据和构建系统
- 04设置版本与入口点
- 05支持可编辑安装
适用场景
- 01为发布构建分发文件
- 02将包发布到 PyPI
- 03配置包的控制台命令
- 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- 构建工作区包
参考资料
- UV 构建:https://docs.astral.sh/uv/guides/publish/
- PyPI:https://pypi.org/
- 详细指南:参见 REFERENCE.md
评论
支持 Markdown