skills/microsoft/agent-framework/python-package-management

python-package-management

SKILL.md

Python Package Management

Monorepo Structure

python/
├── pyproject.toml              # Root package (agent-framework)
├── packages/
│   ├── core/                   # agent-framework-core (main package)
│   ├── azure-ai/               # agent-framework-azure-ai
│   ├── anthropic/              # agent-framework-anthropic
│   └── ...                     # Other connector packages
  • agent-framework-core contains core abstractions and OpenAI/Azure OpenAI built-in
  • Provider packages extend core with specific integrations
  • Root agent-framework depends on agent-framework-core[all]

Dependency Management

Uses uv for dependency management and poethepoet for task automation.

# Full setup (venv + install + prek hooks)
uv run poe setup

# Install/update all dependencies
uv run poe install

# Create venv with specific Python version
uv run poe venv --python 3.12

Lazy Loading Pattern

Provider folders in core use __getattr__ to lazy load from connector packages:

# In agent_framework/azure/__init__.py
_IMPORTS: dict[str, tuple[str, str]] = {
    "AzureAIAgentClient": ("agent_framework_azure_ai", "agent-framework-azure-ai"),
}

def __getattr__(name: str) -> Any:
    if name in _IMPORTS:
        import_path, package_name = _IMPORTS[name]
        try:
            return getattr(importlib.import_module(import_path), name)
        except ModuleNotFoundError as exc:
            raise ModuleNotFoundError(
                f"The package {package_name} is required to use `{name}`. "
                f"Install it with: pip install {package_name}"
            ) from exc

Adding a New Connector Package

Important: Do not create a new package unless approved by the core team.

Initial Release (Preview)

  1. Create directory under packages/ (e.g., packages/my-connector/)
  2. Add the package to tool.uv.sources in root pyproject.toml
  3. Include samples inside the package (e.g., packages/my-connector/samples/)
  4. Do NOT add to [all] extra in packages/core/pyproject.toml
  5. Do NOT create lazy loading in core yet

Promotion to Stable

  1. Move samples to root samples/ folder
  2. Add to [all] extra in packages/core/pyproject.toml
  3. Create provider folder in agent_framework/ with lazy loading __init__.py

Versioning

  • All non-core packages declare a lower bound on agent-framework-core
  • When core version bumps with breaking changes, update the lower bound in all packages
  • Non-core packages version independently; only raise core bound when using new core APIs

Installation Options

pip install agent-framework-core          # Core only
pip install agent-framework-core[all]     # Core + all connectors
pip install agent-framework               # Same as core[all]
pip install agent-framework-azure-ai      # Specific connector (pulls in core)

Maintaining Documentation

When changing a package, check if its AGENTS.md needs updates:

  • Adding/removing/renaming public classes or functions
  • Changing the package's purpose or architecture
  • Modifying import paths or usage patterns
Weekly Installs
2
GitHub Stars
7.8K
First Seen
2 days ago
Installed on
opencode2
antigravity2
github-copilot2
codex2
kimi-cli2
gemini-cli2