Convertir PYO a PY
Recupera código fuente Python legible a partir de bytecode optimizado heredado de Python 2.
Cómo convertir un archivo pyo a py
- Programación
- Aún sin calificaciones.
El software antiguo de Python 2 puede proporcionar únicamente un archivo .pyo cuando un editor, sistema de revisión de código o proyecto de mantenimiento requiere código fuente .py legible. La conversión requiere descompilación porque un archivo PYO no contiene el texto del código fuente original.
Qué es el formato PYO
Un archivo PYO es bytecode de Python optimizado producido por Python 2 cuando el código se ejecuta con -O o -OO. Python 2 normalmente lo almacenaba junto al código fuente como module.pyo; Python 3.5 y posteriores eliminaron el formato PYO independiente y almacenan el bytecode optimizado como archivos .pyc etiquetados.
Puede encontrar archivos PYO en aplicaciones archivadas de Python 2, software de dispositivos integrados y directorios de instalación antiguos que contienen archivos como __init__.pyo. PYO es bytecode compilado para el intérprete de Python, no una copia comprimida o renombrada del archivo .py original.
Qué es el formato PY
Un archivo PY es código fuente de Python en texto sin formato que se puede abrir, editar, buscar, versionar y ejecutar con un intérprete compatible. Es el formato esperado por los editores de código fuente, repositorios de código, linters y la mayoría de las herramientas de desarrollo.
La descompilación puede recrear código Python con apariencia ejecutable, pero normalmente no puede restaurar comentarios, espacios en blanco originales, comentarios de codificación del código fuente, formato exacto ni construcciones del código fuente descartadas durante la compilación. Muchos nombres permanecen en el bytecode, pero no se garantiza que coincidan con los nombres previstos por el autor.
Cómo convertir de PYO a PY
- Identifique la versión del bytecode. Una extensión
.pyonormalmente indica Python 2, pero el bytecode de Python 2.5, 2.6 y 2.7 es diferente. Use la aplicación relacionada, su documentación o una herramienta de inspección de bytecode para determinar la versión a partir del encabezado del archivo. El descompilador debe admitir esa versión. - Conserve el original. Trabaje sobre una copia y evite ejecutar un archivo PYO que no sea de confianza. Si el archivo contiene código propietario, no lo cargue en un servicio de terceros sin autorización.
- Instale un descompilador local.
uncompyle6es una opción de código abierto utilizada habitualmente para el bytecode de Python; instálelo en un entorno aislado conpython -m pip install uncompyle6.pycdc, compilado desde su repositorio oficial, es otra opción local. Compruebe las versiones de bytecode compatibles con cada proyecto antes de elegirlo. - Ejecute el descompilador. Por ejemplo,
uncompyle6 -o recovered module.pyoescribe los archivos recuperados enrecovered. Algunas versiones o wrappers pueden rechazar el sufijo.pyoaunque el archivo contenga bytecode estándar de Python 2. En ese caso, cópielo comomodule.pycy vuelva a intentarlo; cambiar el nombre modifica únicamente el nombre del archivo, no el bytecode. - Capture la salida estándar cuando sea necesario. Si la herramienta imprime el código fuente en lugar de crear un archivo, use
uncompyle6 module.pyo > module.py. Inspeccione el resultado antes de reemplazar cualquier código fuente existente. - Valide con el intérprete correspondiente. Primero compruebe la salida de Python 2 con un intérprete de Python 2 adecuado, como
python2 recovered/module.py, en un entorno controlado. Corrija manualmente los errores del descompilador y, después, porte el código a Python 3 con herramientas como2to3cuando corresponda; el portado automático no sustituye las pruebas.
Ningún cambio de nombre ordinario, extractor de archivos ni operación de exportación de texto convierte PYO en código fuente. Por lo general, los convertidores online acreditados no son una recomendación práctica para este formato: la compatibilidad depende de la versión exacta del bytecode de Python y cargar software propietario expone su código. Un descompilador local es más seguro y normalmente más fiable.
Limitaciones de calidad y compatibilidad
La descompilación es una aproximación. Se pierden los comentarios, el formato, la sintaxis exclusiva del código fuente y parte de la organización original. La compilación de Python 2 con -O elimina las instrucciones de aserción; -OO también elimina los docstrings. Por lo tanto, el archivo recuperado puede diferir en comportamiento o documentación incluso cuando se ejecuta.
Revise la indentación, el manejo de excepciones, los generadores, los decoradores, las codificaciones de cadenas, las importaciones y el flujo de control. Un descompilador puede producir errores de sintaxis o código sutilmente incorrecto cuando no admite por completo la versión del bytecode o una construcción específica del compilador.
Un archivo PYO también puede depender de módulos de paquetes, archivos de datos, extensiones nativas, variables de entorno y un directorio de trabajo específico. Una conversión correcta produce texto de código fuente, no una aplicación de reemplazo independiente.
PYO vs PY: comparación de formatos
Cómo se comparan los formatos PYO y PY en las propiedades que más importan para esta conversión.
| Propiedad | .PYO Python Optimized Bytecode | .PY Python source file |
|---|---|---|
| Legible como texto plano | No | Sí |
| Formato de texto | Ninguno | Básico |
| Imágenes | No | No |
| Edición posterior | No editable directamente | Fácil |
| Se abre en un navegador web | No | No |
| Tamaño de archivo típico | Muy pequeño | Pequeño |
| Estándar abierto | No | Sí |
| Más adecuado para | Incrustación en aplicaciones | Edición y posproducción |
| Introducido | — | 1991 |
| Desarrollador | Python Software Foundation | Python Software Foundation |
| Tipo MIME | — | text/x-python |
La base de datos actualmente no contiene ningún convertidor de archivos pyo.