关于 Poetry Packaging
Poetry Packaging 是面向 Python 开发者的 Poetry 依赖管理与打包学习技能,内容涵盖项目结构、可复现构建、发布和进阶打包工作流。
主要功能
- 01管理依赖和虚拟环境
- 02配置 pyproject.toml
- 03构建并发布软件包
- 04应用语义化版本控制
- 05学习单体仓库与插件系统
适用场景
- 01创建新的 Python 软件包
- 02准备发布到 PyPI 的发行包
- 03按项目阶段组织依赖
- 04规划软件包插件架构
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ pluginagentmarketplace/ custom-plugin-python --skill poetry-packaging安装后在 Claude Code 中输入/poetry-packaging确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/config.yamlreferences/GUIDE.mdscripts/helper.py详细介绍
Poetry 打包
概述
掌握使用 Poetry 进行现代 Python 依赖管理和打包。学习创建、管理和发布专业的 Python 包,实现可复现构建和清晰的依赖解析。
学习目标
- 使用 Poetry 管理项目依赖
- 创建并发布 Python 包
- 处理版本约束和依赖解析
- 遵循最佳实践组织项目结构
- 实施语义化版本控制
- 自动化打包工作流
核心主题
1. Poetry 基础
- 安装 Poetry
- 创建新项目
- 管理依赖
- 管理虚拟环境
- 锁定文件和可复现性
- Poetry 命令和工作流
代码示例:
# Install Poetry
curl -sSL https://install.python-poetry.org | python3 -
# Create new project
poetry new my-awesome-package
cd my-awesome-package
# Project structure created:
# my-awesome-package/
# ├── my_awesome_package/
# │ └── __init__.py
# ├── tests/
# │ └── __init__.py
# ├── pyproject.toml
# └── README.md
# Add dependencies
poetry add requests
poetry add pandas numpy
poetry add --group dev pytest black mypy
# Install dependencies
poetry install
# Run commands in virtual environment
poetry run python main.py
poetry run pytest
# Update dependencies
poetry update
# Show dependency tree
poetry show --tree
# Export to requirements.txt
poetry export -f requirements.txt --output requirements.txt
2. pyproject.toml 配置
- 项目元数据
- 依赖声明
- 版本约束
- 开发依赖
- 构建系统配置
- 脚本和入口点
代码示例:
# pyproject.toml
[tool.poetry]
name = "my-awesome-package"
version = "0.1.0"
description = "An awesome Python package"
authors = ["Your Name <[email protected]>"]
license = "MIT"
readme = "README.md"
homepage = "https://github.com/username/my-awesome-package"
repository = "https://github.com/username/my-awesome-package"
documentation = "https://my-awesome-package.readthedocs.io"
keywords = ["awesome", "package", "python"]
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
]
[tool.poetry.dependencies]
python = "^3.9"
requests = "^2.28.0"
pandas = "^2.0.0"
click = "^8.1.0"
[tool.poetry.group.dev.dependencies]
pytest = "^7.0.0"
pytest-cov = "^4.0.0"
black = "^23.0.0"
mypy = "^1.0.0"
ruff = "^0.1.0"
[tool.poetry.scripts]
my-cli = "my_awesome_package.cli:main"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
# Version constraints examples:
# ^2.0.0 = >=2.0.0 <3.0.0 (caret)
# ~2.0.0 = >=2.0.0 <2.1.0 (tilde)
# 2.0.* = >=2.0.0 <2.1.0 (wildcard)
# >=2.0.0 = 2.0.0 or higher (range)
3. 包结构与发布
- 包布局最佳实践
- 使用语义化版本控制管理版本
- 构建分发包(sdist、wheel)
- 发布到 PyPI/TestPyPI
- 包元数据
- 生成文档
代码示例:
# Recommended package structure
my-awesome-package/
├── my_awesome_package/
│ ├── __init__.py # Package initialization
│ ├── core.py # Core functionality
│ ├── utils.py # Utility functions
│ ├── cli.py # Command-line interface
│ └── py.typed # Type hints marker
├── tests/
│ ├── __init__.py
│ ├── test_core.py
│ └── test_utils.py
├── docs/
│ ├── index.md
│ └── api.md
├── examples/
│ └── basic_usage.py
├── pyproject.toml
├── README.md
├── LICENSE
├── CHANGELOG.md
└── .gitignore
# my_awesome_package/__init__.py
"""
My Awesome Package
A comprehensive package for doing awesome things.
"""
__version__ = "0.1.0"
__author__ = "Your Name"
__email__ = "[email protected]"
from .core import main_function
from .utils import helper_function
__all__ = ["main_function", "helper_function"]
# Publishing workflow
# 1. Update version in pyproject.toml
poetry version patch # 0.1.0 -> 0.1.1
poetry version minor # 0.1.1 -> 0.2.0
poetry version major # 0.2.0 -> 1.0.0
# 2. Build package
poetry build
# Creates dist/my_awesome_package-0.1.0.tar.gz
# Creates dist/my_awesome_package-0.1.0-py3-none-any.whl
# 3. Publish to TestPyPI first
poetry config repositories.testpypi https://test.pypi.org/legacy/
poetry publish -r testpypi
# 4. Test installation
pip install --index-url https://test.pypi.org/simple/ my-awesome-package
# 5. Publish to PyPI
poetry publish
# 6. Create git tag
git tag v0.1.0
git push origin v0.1.0
4. 高级功能
- 管理单体仓库
- 插件系统
- 自定义构建脚本
- 私有包仓库
- CI/CD 集成
- 依赖组
代码示例:
# Advanced pyproject.toml configuration
[tool.poetry]
name = "advanced-package"
version = "1.0.0"
description = "Advanced packaging example"
# Include/exclude files
include = ["my_package/data/*.json"]
exclude = ["my_package/tests/*"]
[tool.poetry.dependencies]
python = "^3.9"
# Optional dependencies (extras)
psycopg2 = { version = "^2.9", optional = true }
mysqlclient = { version = "^2.1", optional = true }
[tool.poetry.extras]
postgresql = ["psycopg2"]
mysql = ["mysqlclient"]
all = ["psycopg2", "mysqlclient"]
# Multiple dependency groups
[tool.poetry.group.test.dependencies]
pytest = "^7.0.0"
pytest-cov = "^4.0.0"
[tool.poetry.group.docs.dependencies]
sphinx = "^5.0.0"
sphinx-rtd-theme = "^1.0.0"
[tool.poetry.group.lint.dependencies]
black = "^23.0.0"
ruff = "^0.1.0"
mypy = "^1.0.0"
# Platform-specific dependencies
[tool.poetry.dependencies.pywin32]
version = "^305"
platform = "win32"
# Plugins
[tool.poetry.plugins."my_package.plugins"]
plugin1 = "my_package.plugins:plugin1"
# CI/CD with GitHub Actions
# .github/workflows/publish.yml
name: Publish to PyPI
on:
release:
types: [published]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install Poetry
run: curl -sSL https://install.python-poetry.org | python3 -
- name: Build and publish
env:
POETRY_PYPI_TOKEN_PYPI: ${{ secrets.PYPI_TOKEN }}
run: |
poetry build
poetry publish
动手实践
项目 1:CLI 工具包
创建一个命令行工具并发布到 PyPI。
要求:
- 使用 Click/Typer 构建 CLI
- 添加多个子命令
- 支持配置文件
- 编写全面的测试
- 生成文档
- 发布到 PyPI
关键技能: Poetry、CLI 开发、打包
项目 2:库包
开发一个 API 简洁且可复用的库。
要求:
- 设计公共 API
- 全面使用类型提示
- 编写全面的文档字符串
- 编写单元测试和集成测试
- 编写 API 文档
- 制定版本管理策略
关键技能: API 设计、文档编写、测试
项目 3:插件系统
创建一个采用插件架构的包。
要求:
- 插件发现机制
- 配置入口点
- 制定插件 API 规范
- 提供示例插件
- 编写插件文档
- 制定分发策略
关键技能: 高级打包、架构设计
评估标准
- 使用 Poetry 创建项目
- 有效管理依赖
- 理解版本约束
- 构建并发布包
- 以专业方式组织项目
- 编写清晰的包元数据
- 实施语义化版本控制
资源
官方文档
学习平台
- Python 打包 - Real Python 指南
- 现代 Python 打包 - 视频教程
- Poetry 教程 - 全面指南
工具
- Poetry - 依赖管理
- Twine - PyPI 上传工具
- bump2version - 递增版本号
- setuptools - 其他打包工具
后续步骤
掌握 Poetry 后,可继续探索:
- Docker - 容器化打包
- GitHub Actions - 自动发布
- Read the Docs - 文档托管
- Pre-commit - 代码质量自动化
评论
支持 Markdown