Sobes.tech
Junior

Qual é a diferença entre os ficheiros .py e .pyc?

sobes.tech IA

Resposta da IA

.py — é o código fonte em Python, escrito por uma pessoa e legível pelo interpretador. .pyc — é o bytecode compilado pelo interpretador a partir do arquivo .py para acelerar execuções posteriores.

O interpretador Python compila automaticamente os ficheiros .py em .pyc na primeira importação do módulo e os guarda para não recompilar em cada execução seguinte. Os ficheiros .pyc são armazenados no diretório __pycache__ ou ao lado do ficheiro .py correspondente em versões antigas.

# Exemplo do conteúdo de um ficheiro .py
def greet(name):
  print(f"Olá, {name}!")
# Bytecode do ficheiro .pyc (não legível diretamente)
# c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00s\x0e\x00\x00\x00d\x00\x00GHd\x01\x00k\x02\x00\x83\x01\x00\x00d\x02\x00R\x00\xfa\x0bgreet.py\x05\x00\x00\x00s\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00C\x00\x00\x00s\x05\x00\x00\x00\x83\x00\x00\x00\x00Sq\x00\x00\x00s\x0c\x00\x00\x00\\x01\x00\x00\x00\x00\x01\x00\x00\x00r\x02\x00\x00\x00r\x02\x00\x00\x00\xfa\x0b<frozen greet>\x01\x00\x00\x00s\x08\x00\x00\x00\xe9\x00\x00\x00\x00r\x03\x00\x00\x00r\x04\x00\x00\x00r\x0b\x00\x00\x00r\x04\x00\x00\x00N\x86\x04\x00\x00\x00GHGHGHGHGHGHGHGHGHGHGHGHGHGHGHGHGHGHG\x0c\x12\x00\x00\x00s\x00\x00\x00\x00

Resumindo:

Ficheiro Descrição Propósito Legibilidade
.py Código fonte Desenvolvimento, escrita de lógica Alta (por humanos)
.pyc Bytecode compilado Aceleração do arranque Baixa (por máquina)

A presença de .pyc não afeta a execução do código, pois o interpretador usa-os apenas para otimizar o carregamento de módulos. Se o ficheiro .py for alterado, o ficheiro .pyc é automaticamente recriado.