Converter PYO para PY
Recuperar código-fonte Python legível a partir de bytecode otimizado legado do Python 2.
Como converter pyo para py arquivo
- Programação
- Nenhuma avaliação ainda.
Softwares antigos em Python 2 podem fornecer apenas um arquivo .pyo quando um editor, sistema de revisão de código ou projeto de manutenção exige um código-fonte .py legível. A conversão exige descompilação porque um arquivo PYO não contém o texto-fonte original.
O que é o formato PYO
Um arquivo PYO é bytecode Python otimizado produzido pelo Python 2 quando o código é executado com -O ou -OO. O Python 2 normalmente o armazenava ao lado do código-fonte como module.pyo; o Python 3.5 e versões posteriores removeram o formato PYO separado e armazenam bytecode otimizado como arquivos .pyc identificados por tags.
Você pode encontrar arquivos PYO em aplicações Python 2 arquivadas, softwares de dispositivos incorporados e diretórios de instalação antigos contendo arquivos como __init__.pyo. PYO é bytecode compilado para o interpretador Python, não uma cópia compactada ou renomeada do arquivo .py original.
O que é o formato PY
Um arquivo PY é código-fonte Python em texto simples que pode ser aberto, editado, pesquisado, versionado e executado com um interpretador compatível. É o formato esperado por editores de código-fonte, repositórios de código, linters e pela maioria das ferramentas de desenvolvimento.
A descompilação pode recriar código Python com aparência executável, mas normalmente não consegue restaurar comentários, espaços em branco originais, comentários de codificação do código-fonte, formatação exata ou construções do código-fonte descartadas durante a compilação. Muitos nomes permanecem no bytecode, mas não há garantia de que correspondam aos nomes pretendidos pelo autor.
Como converter PYO em PY
- Identifique a versão do bytecode. Uma extensão
.pyogeralmente indica Python 2, mas o bytecode do Python 2.5, 2.6 e 2.7 é diferente. Use a aplicação relacionada, sua documentação ou uma ferramenta de inspeção de bytecode para determinar a versão a partir do cabeçalho do arquivo. O descompilador deve ser compatível com essa versão. - Preserve o original. Trabalhe em uma cópia e evite executar um arquivo PYO não confiável. Se o arquivo contiver código proprietário, não o envie a um serviço de terceiros sem autorização.
- Instale um descompilador local.
uncompyle6é uma opção open-source comumente usada para bytecode Python; instale-o em um ambiente isolado compython -m pip install uncompyle6.pycdc, compilado a partir de seu repositório oficial, é outra opção local. Verifique as versões de bytecode compatíveis com cada projeto antes de escolhê-lo. - Execute o descompilador. Por exemplo,
uncompyle6 -o recovered module.pyograva os arquivos recuperados emrecovered. Algumas versões ou wrappers podem rejeitar o sufixo.pyo, embora o arquivo contenha bytecode Python 2 padrão. Nesse caso, copie-o paramodule.pyce tente novamente; renomear altera apenas o nome do arquivo, não o bytecode. - Capture a saída padrão quando necessário. Se a ferramenta imprimir o código-fonte em vez de criar um arquivo, use
uncompyle6 module.pyo > module.py. Inspecione o resultado antes de substituir qualquer código-fonte existente. - Valide com o interpretador correspondente. Primeiro, verifique a saída do Python 2 com um interpretador Python 2 adequado, como
python2 recovered/module.py, em um ambiente controlado. Corrija manualmente os erros do descompilador e depois porte o código para Python 3 com ferramentas como2to3, quando apropriado; o port automático não substitui os testes.
Nenhuma operação comum de renomeação, extração de arquivo ou exportação de texto converte PYO em código-fonte. Conversores online confiáveis geralmente não são uma recomendação prática para esse formato: o suporte depende da versão exata do bytecode Python, e o envio de software proprietário expõe seu código. Um descompilador local é mais seguro e geralmente mais confiável.
Limites de qualidade e compatibilidade
A descompilação é uma aproximação. Comentários, formatação, sintaxe exclusiva do código-fonte e parte da organização original são perdidos. A compilação do Python 2 com -O remove instruções de asserção; -OO também remove docstrings. Portanto, o arquivo recuperado pode diferir em comportamento ou documentação mesmo quando é executado.
Revise a indentação, o tratamento de exceções, os geradores, os decorators, as codificações de strings, as importações e o fluxo de controle. Um descompilador pode produzir erros de sintaxe ou código sutilmente incorreto quando não oferece suporte completo à versão do bytecode ou a uma construção específica do compilador.
Um arquivo PYO também pode depender de módulos de pacotes, arquivos de dados, extensões nativas, variáveis de ambiente e de um diretório de trabalho específico. Uma conversão bem-sucedida produz texto-fonte, não uma aplicação substituta autocontida.
Comparação de formato: PYO vs PY
Como os formatos PYO e PY se comparam nas propriedades mais importantes para esta conversão.
| Propriedade | .PYO Python Optimized Bytecode | .PY Python source file |
|---|---|---|
| Legível em texto simples | Não | Sim |
| Formatação de texto | Nenhum | Básico |
| Imagens | Não | Não |
| Edição posterior | Não editável diretamente | Fácil |
| Abre num navegador web | Não | Não |
| Tamanho típico do arquivo | Muito pequeno | Pequeno |
| Padrão aberto | Não | Sim |
| Mais usado para | Incorporação em aplicações | Edição e pós-produção |
| Introduzido | — | 1991 |
| Desenvolvedor | Python Software Foundation | Python Software Foundation |
| Tipo MIME | — | text/x-python |
O banco de dados atualmente não contém nenhum conversor de arquivo pyo.