Convertir pyo a py

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

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

  1. Identifique la versión del bytecode. Una extensión .pyo normalmente 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.
  2. 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.
  3. Instale un descompilador local. uncompyle6 es una opción de código abierto utilizada habitualmente para el bytecode de Python; instálelo en un entorno aislado con python -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.
  4. Ejecute el descompilador. Por ejemplo, uncompyle6 -o recovered module.pyo escribe los archivos recuperados en recovered. Algunas versiones o wrappers pueden rechazar el sufijo .pyo aunque el archivo contenga bytecode estándar de Python 2. En ese caso, cópielo como module.pyc y vuelva a intentarlo; cambiar el nombre modifica únicamente el nombre del archivo, no el bytecode.
  5. 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.
  6. 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 como 2to3 cuando 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.

Comparación de los formatos de archivo PYO y PY
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.

Conversión inversa

Convertir a .py
desde otros formatos

Compartir en redes sociales: