Convertir PYC a PY
Recupera código fuente Python legible a partir de bytecode con decompiladores compatibles con la versión.
Cree archivos PY en línea
Todavía no podemos leer archivos PYC, así que esta conversión no está disponible. Si puede exportar su trabajo a alguno de estos formatos, lo convertiremos en PY:
¿Quiere convertir PYC a PY?
Háganoslo saber. Elegimos qué conversiones añadir a continuación según el interés.
Cómo convertir un archivo pyc a py
- Programación
- Aún sin calificaciones.
Se necesita un archivo PY cuando un programa, desarrollador o archivo contiene únicamente un módulo Python compilado, pero su código fuente debe inspeccionarse o editarse. Esto es decompilación, no una conversión de formato sin pérdidas, por lo que el código recuperado puede no coincidir con el original.
Qué es el formato PYC
Los archivos PYC contienen bytecode de Python y un objeto de código serializado para que lo ejecute un intérprete de Python. Python suele crearlos al importar o compilar un archivo PY, colocándolos en __pycache__ con nombres como module.cpython-311.pyc. Los paquetes instalados, las implementaciones de aplicaciones y el software empaquetado pueden contener archivos PYC sin el código fuente correspondiente.
Un archivo PYC tiene un encabezado que contiene metadatos del intérprete y de la caché, seguido de datos de bytecode serializados mediante marshal. Normalmente no conserva comentarios, espacios en blanco originales, comillas, formato ni la disposición exacta del código fuente. Muchos identificadores permanecen en el objeto de código, pero la optimización, la ofuscación, el código generado y los detalles de compilación pueden eliminar o alterar información.
Qué es el formato PY
PY es un archivo de código fuente Python de texto plano destinado a su lectura y edición. Los intérpretes de Python, IDE, linters, formateadores, sistemas de control de versiones y herramientas de empaquetado funcionan directamente con archivos PY. A diferencia del resultado reconstruido, un archivo PY original conserva los comentarios del desarrollador, el formato, la organización del código fuente y, normalmente, toda la intención a nivel de código fuente.
Cambiar el nombre de un archivo PYC a .py no lo convierte: el resultado sigue siendo bytecode binario y no es código fuente Python válido.
Cómo decompilar un archivo PYC
- Haz una copia del archivo PYC y trabaja sobre esa copia. No ejecutes un PYC ni un script reconstruido que no sea de confianza; los decompiladores y las importaciones de Python deben ejecutarse en un entorno aislado cuando el archivo no sea de confianza.
- Identifica la versión de Python que creó el archivo. Un nombre como
module.cpython-311.pycidentifica CPython 3.11, pero un nombre de archivo independiente puede no contener esta información. El paquete que lo generó, el encabezado del PYC o el número mágico del bytecode pueden proporcionar pistas adicionales. - Instala un decompilador cuya compatibilidad documentada incluya esa versión del bytecode. Por ejemplo:
python -m pip install decompyle3
decompyle3 -o recovered path/to/module.pyc
El directorio de salida debe contener archivos de código fuente reconstruidos. Si el comando instalado no está disponible en la ruta del sistema, ejecuta el archivo ejecutable desde el directorio de scripts del entorno.
Para otra versión compatible, prueba uncompyle6:
python -m pip install uncompyle6
uncompyle6 -o recovered path/to/module.pyc
decompyle3 y uncompyle6 son compatibles con rangos específicos de bytecode de Python, no con todas las versiones actuales, así que consulta la documentación de compatibilidad de cada proyecto antes de elegir entre ellos. pycdc es otra opción local cuando su versión es compatible con la versión de bytecode del archivo:
pycdc path/to/module.pyc > recovered.py
Los servicios en línea como PyLingual pueden ser útiles para archivos no confidenciales cuando su compatibilidad publicada incluye la versión de Python del PYC. Cargar bytecode envía código potencialmente propietario a un tercero y puede someterlo a límites de tamaño, retención o procesamiento; utiliza una herramienta local para software confidencial y verifica el resultado descargado antes de abrirlo o ejecutarlo.
Comprobar y reparar el código fuente recuperado
Abre el archivo .py generado en un editor e inspecciona la sintaxis, las importaciones, el manejo de excepciones, los generadores, las comprensiones, los decoradores, los cierres y el código generado dinámicamente. Compílalo con el intérprete previsto:
python -m py_compile recovered.py
Una compilación correcta solo comprueba la sintaxis. Ejecuta las pruebas pertinentes y compara el comportamiento con la aplicación original antes de utilizar el resultado como código fuente de reemplazo. Un decompilador puede generar código de apariencia válida con un flujo de control incorrecto o detalles faltantes.
Compatibilidad y límites de la recuperación
El bytecode está estrechamente vinculado a las implementaciones y versiones de Python. Un PYC creado por Python 3.11 o 3.12 puede no funcionar con un decompilador compatible únicamente con bytecode más antiguo; los archivos PYC de Python 2 generalmente requieren herramientas compatibles con Python 2. Un archivo dañado, truncado, optimizado, ofuscado o modificado puede producir una salida incompleta o fallar por completo.
La decompilación no puede restaurar comentarios, el formato original, módulos externos no disponibles, datos del paquete ni archivos de código fuente a los que haga referencia el código. Los módulos de extensión nativa no son archivos PYC de Python y requieren métodos de recuperación diferentes. El archivo PY original, el repositorio de control de versiones, el archivo de implementación, la copia de seguridad o el código fuente del paquete son las únicas formas fiables de obtener el código fuente exacto.
PYC vs PY: comparación de formatos
Cómo se comparan los formatos PYC y PY en las propiedades que más importan para esta conversión.
| Propiedad | .PYC Python compiled 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 | Sí | Sí |
| Más adecuado para | Incrustación en aplicaciones | Edición y posproducción |
| Introducido | 1991 | 1991 |
| Desarrollador | Python Software Foundation | Python Software Foundation |
| Tipo MIME | — | text/x-python |
La información sobre extensiones y tipos de archivo la proporciona File-Extensions.org
Software sugerido para convertir pyc a py
Preguntas frecuentes
¿Se puede convertir un archivo .pyc de nuevo a un archivo .py?
A veces, un archivo .pyc puede descompilarse para obtener un código fuente .py aproximado, pero normalmente no se puede restaurar exactamente. Los comentarios originales, el formato y algunos detalles del código fuente normalmente se pierden durante la compilación.
¿El código .py recuperado será idéntico al original?
No, el código .py recuperado normalmente es una reconstrucción del bytecode compilado, no el código fuente original. Es posible que los nombres y la estructura del programa se conserven parcialmente, pero los comentarios, los espacios, algunas expresiones y otros detalles del código fuente pueden ser diferentes o faltar.
¿Por qué falla la conversión de .pyc a .py con algunos archivos de Python?
A menudo falla cuando la versión del bytecode no coincide con la del descompilador o cuando el archivo fue optimizado, ofuscado, dañado o generado por una implementación diferente de Python. Un archivo .pyc también puede contener únicamente el código compilado de un módulo, por lo que no puede restaurar archivos fuente ni la estructura del proyecto que nunca se incluyeron.
¿Puedo ejecutar el archivo .py resultante exactamente igual que el original?
A menudo sí, pero no siempre; el código recuperado puede necesitar correcciones manuales antes de ejecutarse. El bytecode específico de una versión de Python, los archivos externos que falten y los detalles del código fuente que se hayan perdido pueden provocar errores de sintaxis o cambios en el comportamiento.