python-project-structure
Organiza a estrutura de projetos Python, definindo como o código é dividido em partes. Facilita a criação e manutenção de projetos maiores.
O que ela faz
Ajuda a organizar seus projetos de código Python para que fiquem mais fáceis de entender e gerenciar. Isso inclui como nomear arquivos, onde colocar o código e como definir o que é público ou privado.
Quando usar
- ✓Ao começar um novo projeto em Python.
- ✓Ao reorganizar um código que já existe.
- ✓Ao decidir como dividir seu código em partes menores.
Exemplo do que pedir para a IA
“Como devo organizar a estrutura de pastas para um novo projeto web em Python?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
A IA sugere como agrupar códigos relacionados em arquivos e pastas, define quais partes do código podem ser usadas por outros e como organizar os testes.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add wshobson/agents --skill python-project-structureOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/wshobson/agents/main/plugins/python-development/skills/python-project-structure/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Estrutura de Projetos Python e Arquitetura de Módulos
Projete projetos Python bem organizados com limites claros de módulos, interfaces públicas explícitas e estruturas de diretórios fáceis de manter. Uma boa organização torna o código descoberto e as mudanças previsíveis.
Quando Usar Esta Habilidade
- Iniciando um novo projeto Python do zero
- Reorganizando uma base de código existente para clareza
- Definindo APIs públicas de módulos com
__all__ - Decidindo entre estruturas de diretórios planas e aninhadas
- Determinando estratégias de posicionamento de arquivos de teste
- Criando pacotes de biblioteca reutilizáveis
Conceitos Principais
1. Coesão de Módulos
Agrupe código relacionado que muda junto. Um módulo deve ter um propósito único e claro.
2. Interfaces Explícitas
Defina o que é público com __all__. Tudo o que não estiver listado são detalhes de implementação interna.
3. Hierarquias Planas
Prefira estruturas de diretórios rasas. Adicione profundidade apenas para subdomínios genuínos.
4. Convenções Consistentes
Aplique padrões de nomenclatura e organização uniformemente em todo o projeto.
Início Rápido
myproject/
├── src/
│ └── myproject/
│ ├── __init__.py
│ ├── services/
│ ├── models/
│ └── api/
├── tests/
├── pyproject.toml
└── README.md
Padrões Fundamentais
Padrão 1: Um Conceito por Arquivo
Cada arquivo deve focar em um único conceito ou conjunto de funções intimamente relacionadas. Considere dividir quando um arquivo:
- Lida com múltiplas responsabilidades não relacionadas
- Cresce além de 300-500 linhas (varia com a complexidade)
- Contém classes que mudam por razões diferentes
# 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...
Padrão 2: APIs Públicas Explícitas com __all__
Defina a interface pública para cada módulo. Membros não listados são detalhes de implementação interna.
# 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
Padrão 3: Estrutura de Diretório Plana
Prefira aninhamento mínimo. Hierarquias profundas tornam as importações verbosas e a navegação difícil.
# 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/
Adicione subpacotes apenas quando houver um subdomínio genuíno que exija isolamento.
Padrão 4: Organização de Arquivos de Teste
Escolha uma abordagem e aplique-a consistentemente em todo o projeto.
Opção A: Testes Colocados
src/
├── user_service.py
├── test_user_service.py
├── order_service.py
└── test_order_service.py
Benefícios: Testes ficam ao lado do código que eles verificam. Fácil de ver lacunas de cobertura.
Opção B: Diretório de Testes Paralelo
src/
├── services/
│ ├── user_service.py
│ └── order_service.py
tests/
├── services/
│ ├── test_user_service.py
│ └── test_order_service.py
Benefícios: Separação limpa entre código de produção e de teste. Padrão para projetos maiores.
Padrões Avançados
Padrão 5: Inicialização de Pacotes
Use __init__.py para fornecer uma interface pública limpa para os consumidores do pacote.
# 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"
Os consumidores podem então importar diretamente do pacote:
from mypackage import MainClass, Settings
Padrão 6: Arquitetura em Camadas
Organize o código por camada arquitetônica para uma clara separação de responsabilidades.
myapp/
├── api/ # HTTP handlers, request/response
│ ├── routes/
│ └── middleware/
├── services/ # Business logic
├── repositories/ # Data access
├── models/ # Domain entities
├── schemas/ # API schemas (Pydantic)
└── config/ # Configuration
…
Perguntas frequentes
O que é `__all__`?
É uma lista que você define em um arquivo Python para dizer explicitamente quais partes do seu código são públicas e podem ser usadas por outros programas. O que não está na lista é considerado interno.
É melhor ter muitas pastas ou poucas?
Geralmente, é melhor ter poucas pastas (estrutura 'flat'). Adicione mais pastas apenas se for realmente necessário para separar grandes partes do projeto.
Onde devo colocar os arquivos de teste?
Você pode colocá-los junto com o código que eles testam ou em uma pasta separada chamada 'tests'. O importante é ser consistente.
Detalhes
Descrição original do autor
Python project organization, module architecture, and public API design. Use when setting up new projects, organizing modules, defining public interfaces with __all__, or planning directory layouts.
repo: wshobson/agents
Popularidade
- Estrelas no GitHub
- 41 mil
- Posição no ranking
- #4932
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
screen-reader-testing
Faz seu agente testar sites usando leitores de tela para garantir que sejam acessíveis.
wshobson/agents
wcag-audit-patterns
Ajuda seu agente a auditar sites para acessibilidade e corrigir problemas de acordo com as diretrizes WCAG.
wshobson/agents
multi-reviewer-patterns
Faz seu agente coordenar revisões de código paralelas, deduplicando achados e consolidando relatórios.
wshobson/agents
parallel-debugging
Permite ao agente depurar problemas complexos com investigações paralelas e análise de causa raiz.
wshobson/agents
Skills parecidas
benchmark-optimization-loop
Faz seu agente melhorar a velocidade de algo de forma medida. Ele testa várias versões e escolhe a mais rápida que ainda funciona corretamente.
affaan-m/ECC
change-impact
Ajuda seu agente a analisar o impacto de mudanças no código antes de fazê-las. Ele compara o planejado com o real depois, cobrindo caminhos, dados, testes e documentação. É útil para mudanças arriscadas ou que afetam várias partes do sistema.
affaan-m/ECC
click-path-audit
Faz seu agente rastrear todos os botões e interações do usuário para achar bugs. Ele encontra problemas onde funções parecem funcionar sozinhas, mas falham juntas. Útil quando bugs persistem mesmo após depuração.
affaan-m/ECC