O que é o formato de ficheiro PYO?
Um arquivo .pyo é um arquivo de bytecode otimizado do Python legado produzido pelo interpretador CPython quando executado com a flag -O (otimizar) ou -OO. Passar -O remove as instruções assert do bytecode compilado; passar -OO adicionalmente remove todas as docstrings, reduzindo ligeiramente o tamanho do arquivo.
Internamente, os arquivos .pyo são idênticos em formato, byte a byte, aos arquivos .pyc: um cabeçalho de 16 bytes (número mágico de 4 bytes específico da versão, campo de flags de 4 bytes, timestamp ou hash de origem de 4 bytes, tamanho da origem de 4 bytes) seguido por um objeto de código CPython serializado (marshalled). O nível de otimização é refletido apenas no conteúdo compilado - nunca no cabeçalho do arquivo.
A extensão .pyo foi descontinuada no Python 3.5 pela PEP 488 (setembro de 2015) e não é mais gerada por nenhuma versão atual do Python. A partir do Python 3.5, o bytecode otimizado é armazenado dentro de __pycache__ com nomes como module.cpython-311.opt-1.pyc (para -O) ou .opt-2.pyc (para -OO). Se você encontrar um arquivo .pyo hoje, ele se origina de código Python 2 ou Python 3.0-3.4.
Arquivos .pyo não são portáveis entre versões do CPython - o número mágico muda a cada lançamento. Ferramentas como uncompyle6 (Python 2-3.8) e decompyle3 (Python 3.7-3.11) podem descompilar arquivos .pyo de volta para o código-fonte .py aproximado, embora a precisão varie conforme a versão do Python e a complexidade do código.
Segurança e proteção
RISCO: MEDIUMUm arquivo .pyo é executado como bytecode do Python com todas as capacidades de um script Python - acesso ao sistema de arquivos, rede, execução de subprocessos. Nunca execute um .pyo de uma fonte não confiável. Softwares antivírus geralmente não escaneiam o conteúdo de arquivos .pyo. Aplicativos Python maliciosos às vezes são distribuídos apenas como bytecode (.pyc/.pyo) para dificultar a engenharia reversa, embora descompiladores possam recuperar grande parte do código-fonte.
Detalhes do formato
em resumoProgramas que abrem arquivos PYO
Detalhes técnicos
especificação profunda| Relação de formato | Formato de arquivo idêntico byte a byte ao `.pyc`; distinguido apenas pela extensão do nome do arquivo e pelo conteúdo de otimização |
| Estrutura do cabeçalho | Cabeçalho de 16 bytes: magic de versão de 4 bytes + flags de 4 bytes + mtime ou hash de origem de 4 bytes + tamanho da origem de 4 bytes |
| Formato do corpo | Objeto de código CPython serializado (instruções de bytecode, pool de constantes, nomes, nomes de variáveis, objetos de código aninhados) |
| Ordem dos bytes | Little-endian (formato de serialização marshal do CPython) |
| Nível de otimização -O | Remove instruções `assert` do bytecode compilado |
| Nível de otimização -OO | Remove instruções `assert` e todas as docstrings do bytecode compilado |
| Descontinuação | Extensão `.pyo` eliminada no Python 3.5 (PEP 488, setembro de 2015); não gerada por nenhuma versão atual do Python |
| Equivalente moderno | `module.cpython-3X.opt-1.pyc` (nível 1) ou `.opt-2.pyc` (nível 2) armazenado em `__pycache__` |
| Portabilidade de versão | Não é portável entre versões do CPython; o número mágico nos bytes 0-3 muda a cada lançamento principal do CPython |
| Validação de integridade | Python 3.7+ (PEP 552): SipHash opcional da origem armazenado nas flags do cabeçalho; Python 2 / início do 3: apenas comparação de mtime |
| Ferramentas de descompilação | `uncompyle6` (Python 2-3.8), `decompyle3` (Python 3.7-3.11) |
| Escopo legado | Produzido apenas pelo Python 2 ou Python 3.0-3.4; não encontrado em projetos voltados para Python 3.5 ou posterior |
| Lançado | Early CPython (1990s); same as .pyc but with optimizations (assert removal with -O; docstring removal with -OO) |
| Versão mais recente | DEPRECATED in Python 3.5 (PEP 488, September 2015) - .pyo extension no longer generated; replaced by .cpython-3X.opt-1.pyc / .opt-2.pyc naming |
| Padrão aberto | Sim · livre de royalties |
| Especificação | peps.python.org |
Conversões de PYO
Perguntas e Respostas da Comunidade
perguntado por usuáriosAinda não há perguntas - seja o primeiro a perguntar sobre arquivos PYO.