mcpField
P
Poetry Packaging

Poetry Packaging

github.com/pluginagentmarketplace开发6132 次安装44 周前更新
代码仓库

关于 Poetry Packaging

Poetry Packaging 是面向 Python 开发者的 Poetry 依赖管理与打包学习技能,内容涵盖项目结构、可复现构建、发布和进阶打包工作流。

主要功能

  1. 01管理依赖和虚拟环境
  2. 02配置 pyproject.toml
  3. 03构建并发布软件包
  4. 04应用语义化版本控制
  5. 05学习单体仓库与插件系统

适用场景

  1. 01创建新的 Python 软件包
  2. 02准备发布到 PyPI 的发行包
  3. 03按项目阶段组织依赖
  4. 04规划软件包插件架构

安装

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

$npx skills add https://github.com/pluginagentmarketplace/custom-plugin-python --skill poetry-packaging

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

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
config.yaml
references/
GUIDE.md
scripts/
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 创建项目
  • 有效管理依赖
  • 理解版本约束
  • 构建并发布包
  • 以专业方式组织项目
  • 编写清晰的包元数据
  • 实施语义化版本控制

资源

官方文档
学习平台
工具

后续步骤

掌握 Poetry 后,可继续探索:

  • Docker - 容器化打包
  • GitHub Actions - 自动发布
  • Read the Docs - 文档托管
  • Pre-commit - 代码质量自动化

评论

支持 Markdown