ASD

Python Project Structure

Organización de proyectos Python, arquitectura de módulos y diseño de APIs públicas con __all__, para nuevos proyectos o reorganización de directorios.

Estrellas
38.8k

en todo el repo

Actividad
28

0–100, la ruta de este skill

Actualizado
hace 6 meses

último commit aquí

Commits
0

últimos 90 días

Contexto
1.7k tok

50 tok en reposo

Paquete
1 archivo

7 KB

Instalar

Funciona con cualquier agente que lea SKILL.md

npx -y skills add wshobson/agents --skill python-project-structure --agent claude-code

Se instala solo en este repositorio.

Qué hace

  • Define layouts de directorios para proyectos Python nuevos o reorganizados
  • Establece convenciones para APIs públicas usando __all__
  • Recomienda estructuras planas frente a jerarquías anidadas
  • Define estrategias de ubicación de archivos de test
  • Propone arquitectura por capas o por dominio (domain-driven)

Úsalo cuando

  • Al iniciar un proyecto Python desde cero
  • Al reorganizar una base de código existente para mayor claridad
  • Al definir APIs públicas de módulos con __all__
  • Al decidir entre estructuras de directorios planas o anidadas

No lo uses cuando

    Qué lo activa

    Di cualquiera de estas frases y el agente debería cargar este skill.

    • Ayúdame a organizar la estructura de carpetas de mi nuevo proyecto Python
    • ¿Cómo defino la API pública de este módulo con __all__?
    • ¿Dónde debería colocar los tests, junto al código o en carpeta aparte?

    SKILL.md

    En inglés

    Python Project Structure & Module Architecture

    Design well-organized Python projects with clear module boundaries, explicit public interfaces, and maintainable directory structures. Good organization makes code discoverable and changes predictable.

    When to Use This Skill

    • Starting a new Python project from scratch
    • Reorganizing an existing codebase for clarity
    • Defining module public APIs with __all__
    • Deciding between flat and nested directory structures
    • Determining test file placement strategies
    • Creating reusable library packages

    Core Concepts

    1. Module Cohesion

    Group related code that changes together. A module should have a single, clear purpose.

    2. Explicit Interfaces

    Define what's public with __all__. Everything not listed is an internal implementation detail.

    3. Flat Hierarchies

    Prefer shallow directory structures. Add depth only for genuine sub-domains.

    4. Consistent Conventions

    Apply naming and organization patterns uniformly across the project.

    Quick Start

    myproject/
    ├── src/
    │   └── myproject/
    │       ├── __init__.py
    │       ├── services/
    │       ├── models/
    │       └── api/
    ├── tests/
    ├── pyproject.toml
    └── README.md
    

    Fundamental Patterns

    Pattern 1: One Concept Per File

    Each file should focus on a single concept or closely related set of functions. Consider splitting when a file:

    • Handles multiple unrelated responsibilities
    • Grows beyond 300-500 lines (varies by complexity)
    • Contains classes that change for different reasons
    # Good: Focused files
    # user_service.py - User business logic
    # user_repository.py - User data access
    # user_models.py - User data structures
    
    # Avoid: Kitchen sink files
    # user.py - Contains service, repository, models, utilities...
    

    Pattern 2: Explicit Public APIs with __all__

    Define the public interface for every module. Unlisted members are internal implementation details.

    # mypackage/services/__init__.py
    from .user_service import UserService
    from .order_service import OrderService
    from .exceptions import ServiceError, ValidationError
    
    __all__ = [
        "UserService",
        "OrderService",
        "ServiceError",
        "ValidationError",
    ]
    
    # Internal helpers remain private by omission
    # from .internal_helpers import _validate_input  # Not exported
    

    Pattern 3: Flat Directory Structure

    Prefer minimal nesting. Deep hierarchies make imports verbose and navigation difficult.

    # Preferred: Flat structure
    project/
    ├── api/
    │   ├── routes.py
    │   └── middleware.py
    ├── services/
    │   ├── user_service.py
    │   └── order_service.py
    ├── models/
    │   ├── user.py
    │   └── order.py
    └── utils/
        └── validation.py
    
    # Avoid: Deep nesting
    project/core/internal/services/impl/user/
    

    Add sub-packages only when there's a genuine sub-domain requiring isolation.

    Pattern 4: Test File Organization

    Choose one approach and apply it consistently throughout the project.

    Option A: Colocated Tests

    src/
    ├── user_service.py
    ├── test_user_service.py
    ├── order_service.py
    └── test_order_service.py
    

    Benefits: Tests live next to the code they verify. Easy to see coverage gaps.

    Option B: Parallel Test Directory

    src/
    ├── services/
    │   ├── user_service.py
    │   └── order_service.py
    tests/
    ├── services/
    │   ├── test_user_service.py
    │   └── test_order_service.py
    

    Benefits: Clean separation between production and test code. Standard for larger projects.

    Advanced Patterns

    Pattern 5: Package Initialization

    Use __init__.py to provide a clean public interface for package consumers.

    # mypackage/__init__.py
    """MyPackage - A library for doing useful things."""
    
    from .core import MainClass, HelperClass
    from .exceptions import PackageError, ConfigError
    from .config import Settings
    
    __all__ = [
        "MainClass",
        "HelperClass",
        "PackageError",
        "ConfigError",
        "Settings",
    ]
    
    __version__ = "1.0.0"
    

    Consumers can then import directly from the package:

    from mypackage import MainClass, Settings
    

    Pattern 6: Layered Architecture

    Organize code by architectural layer for clear separation of concerns.

    myapp/
    ├── api/           # HTTP handlers, request/response
    │   ├── routes/
    │   └── middleware/
    ├── services/      # Business logic
    ├── repositories/  # Data access
    ├── models/        # Domain entities
    ├── schemas/       # API schemas (Pydantic)
    └── config/        # Configuration
    

    Each layer should only depend on layers below it, never above.

    Pattern 7: Domain-Driven Structure

    For complex applications, organize by business domain rather than technical layer.

    ecommerce/
    ├── users/
    │   ├── models.py
    │   ├── services.py
    │   ├── repository.py
    │   └── api.py
    ├── orders/
    │   ├── models.py
    │   ├── services.py
    │   ├── repository.py
    │   └── api.py
    └── shared/
        ├── database.py
        └── exceptions.py
    

    File and Module Naming

    Conventions

    • Use snake_case for all file and module names: user_repository.py
    • Avoid abbreviations that obscure meaning: user_repository.py not usr_repo.py
    • Match class names to file names: UserService in user_service.py

    Import Style

    Use absolute imports for clarity and reliability:

    # Preferred: Absolute imports
    from myproject.services import UserService
    from myproject.models import User
    
    # Avoid: Relative imports
    from ..services import UserService
    from . import models
    

    Relative imports can break when modules are moved or reorganized.

    Best Practices Summary

    1. Keep files focused - One concept per file, consider splitting at 300-500 lines (varies by complexity)
    2. Define __all__ explicitly - Make public interfaces clear
    3. Prefer flat structures - Add depth only for genuine sub-domains
    4. Use absolute imports - More reliable and clearer
    5. Be consistent - Apply patterns uniformly across the project
    6. Match names to content - File names should describe their purpose
    7. Separate concerns - Keep layers distinct and dependencies flowing one direction
    8. Document your structure - Include a README explaining the organization

    Reproducido de wshobson/agents bajo licencia MIT. Leer esta página en markdown.

    Archivos

    1 archivo en el paquete. Solo se lee SKILL.md al activarse — las referencias se cargan si el skill decide que las necesita.

    Detalles

    Creador
    wshobson
    Licencia
    MIT
    Recursos incluidos
    Solo SKILL.md
    Repositorio
    wshobson/agents
    Código fuente
    Ver SKILL.md

    Etiquetas

    Más de wshobson/agents

    Este repo incluye 180 skills. Si instalas uno, normalmente ya tienes los demás.

    Úsalo al seleccionar y colocar iconos, imágenes, SVGs, diagramas o infografías de apoyo aprobados en un PPTX editable.

    Costo de contexto al activarse
    344 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 26 días
    documentos

    Úsalo cuando pidan optimizar un prompt, mejorar su rendimiento, diseñar una plantilla, aplicar chain-of-thought, few-shot prompting o técnicas avanzadas de prompt engineering para producción.

    Costo de contexto al activarse
    1.3k tok
    Tamaño del paquete
    10 archivos
    Última actualización
    el mes pasado
    herramientas desarrollo

    Úsalo al redactar o reparar una especificación JSON con coordenadas explícitas para un PPTX editable.

    Costo de contexto al activarse
    489 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 26 días
    documentos

    Úsalo para validar o reparar un PPTX editable en cuanto a geometría, accesibilidad, editabilidad nativa, linaje de fuente e integridad del paquete OOXML.

    Costo de contexto al activarse
    409 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 26 días
    documentos

    Úsalo para analizar un PPTX de referencia en modo solo lectura: estructura, tema, tipografía, ritmo de layout, diagnósticos, catálogos de plantillas derivados o inspección segura del paquete OOXML.

    Costo de contexto al activarse
    689 tok
    Tamaño del paquete
    8 archivos
    Última actualización
    hace 26 días
    documentos

    Úsalo al preparar la narrativa, las fuentes y el contexto de diseño para un nuevo deck PPTX editable.

    Costo de contexto al activarse
    415 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 26 días
    documentos

    Skills relacionados

    Domina el sistema de tipos avanzado de TypeScript: generics, tipos condicionales, mapped types, template literals y utility types para aplicaciones type-safe.

    Costo de contexto al activarse
    2k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 2 meses
    herramientas desarrollo

    Patrones de resiliencia en Python: reintentos automáticos, backoff exponencial, timeouts y decoradores tolerantes a fallos para servicios.

    Costo de contexto al activarse
    1.5k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 2 meses
    herramientas desarrollo

    Domina Next.js 14+ App Router con Server Components, streaming, rutas paralelas y data fetching avanzado. Úsalo al construir apps Next.js, implementar SSR/SSG u optimizar React Server Components.

    Costo de contexto al activarse
    929 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 2 meses
    herramientas desarrollo