Convertir PYO en PY
Récupérer le code source Python lisible à partir de bytecode Python 2 optimisé hérité.
Comment convertir pyo en fichier py
- Programmation
- Aucune note pour l'instant.
Les anciens logiciels Python 2 peuvent ne fournir qu’un fichier .pyo lorsqu’un éditeur, un système de revue de code ou un projet de maintenance nécessite un code source .py lisible. La conversion nécessite une décompilation, car un fichier PYO ne contient pas le texte source d’origine.
Qu’est-ce que le format PYO ?
Un fichier PYO est du bytecode Python optimisé produit par Python 2 lorsque le code est exécuté avec -O ou -OO. Python 2 le stockait généralement à côté du source sous le nom module.pyo ; Python 3.5 et les versions ultérieures ont supprimé le format PYO distinct et stockent le bytecode optimisé sous forme de fichiers .pyc marqués.
Vous pouvez trouver des fichiers PYO dans des applications Python 2 archivées, des logiciels pour appareils intégrés et d’anciens répertoires d’installation contenant des fichiers tels que __init__.pyo. PYO est du bytecode compilé pour l’interpréteur Python, et non une copie compressée ou renommée du fichier .py d’origine.
Qu’est-ce que le format PY ?
Un fichier PY est du code source Python en texte brut qui peut être ouvert, modifié, recherché, géré par un système de contrôle de version et exécuté avec un interpréteur compatible. Il s’agit du format attendu par les éditeurs de code source, les dépôts de code, les linters et la plupart des outils de développement.
La décompilation peut recréer du code Python ressemblant à du code exécutable, mais elle ne peut normalement pas restaurer les commentaires, les espaces d’origine, les commentaires d’encodage du source, la mise en forme exacte ou les constructions du source supprimées lors de la compilation. De nombreux noms restent présents dans le bytecode, mais il n’est pas garanti qu’ils correspondent aux noms choisis par l’auteur.
Comment convertir PYO en PY
- Identifiez la version du bytecode. Une extension
.pyoindique généralement Python 2, mais les bytecodes de Python 2.5, 2.6 et 2.7 sont différents. Utilisez l’application correspondante, sa documentation ou un outil d’inspection du bytecode pour déterminer la version à partir de l’en-tête du fichier. Le décompilateur doit prendre cette version en charge. - Conservez l’original. Travaillez sur une copie et évitez d’exécuter un fichier PYO non fiable. Si le fichier contient du code propriétaire, ne le téléversez pas vers un service tiers sans autorisation.
- Installez un décompilateur local.
uncompyle6est une option open source couramment utilisée pour le bytecode Python ; installez-le dans un environnement isolé avecpython -m pip install uncompyle6.pycdc, compilé à partir de son dépôt officiel, constitue une autre option locale. Vérifiez les versions de bytecode prises en charge par chaque projet avant de faire votre choix. - Exécutez le décompilateur. Par exemple,
uncompyle6 -o recovered module.pyoécrit les fichiers récupérés dansrecovered. Certaines versions ou wrappers peuvent refuser le suffixe.pyo, même si le fichier contient du bytecode Python 2 standard. Dans ce cas, copiez-le sous le nommodule.pycet réessayez ; le renommage modifie uniquement le nom du fichier, pas le bytecode. - Capturez la sortie standard si nécessaire. Si l’outil affiche le source au lieu de créer un fichier, utilisez
uncompyle6 module.pyo > module.py. Examinez le résultat avant de remplacer un éventuel source existant. - Validez avec l’interpréteur correspondant. Commencez par vérifier le résultat Python 2 avec un interpréteur Python 2 approprié, tel que
python2 recovered/module.py, dans un environnement contrôlé. Corrigez manuellement les erreurs du décompilateur, puis portez le code vers Python 3 avec des outils tels que2to3lorsque cela est approprié ; un portage automatique ne remplace pas les tests.
Aucun simple renommage, extracteur d’archives ou opération d’exportation de texte ordinaire ne convertit PYO en source. Les convertisseurs en ligne réputés ne constituent généralement pas une recommandation pratique pour ce format : la prise en charge dépend de la version exacte du bytecode Python, et le téléversement d’un logiciel propriétaire expose son code. Un décompilateur local est plus sûr et généralement plus fiable.
Limites de qualité et de compatibilité
La décompilation est une approximation. Les commentaires, la mise en forme, la syntaxe propre au source et une partie de l’organisation d’origine sont perdus. La compilation Python 2 avec -O supprime les instructions d’assertion ; -OO supprime également les docstrings. Le fichier récupéré peut donc différer au niveau du comportement ou de la documentation, même lorsqu’il s’exécute.
Vérifiez l’indentation, la gestion des exceptions, les générateurs, les décorateurs, les encodages de chaînes, les imports et le flux de contrôle. Un décompilateur peut produire des erreurs de syntaxe ou du code subtilement incorrect lorsqu’il ne prend pas entièrement en charge la version du bytecode ou une construction particulière du compilateur.
Un fichier PYO peut également dépendre de modules de package, de fichiers de données, d’extensions natives, de variables d’environnement et d’un répertoire de travail spécifique. Une conversion réussie produit du texte source, et non une application de remplacement autonome.
Comparaison du format PYO vs PY
Comparaison entre les formats PYO et PY sur les propriétés les plus importantes pour cette conversion.
| Propriété | .PYO Python Optimized Bytecode | .PY Python source file |
|---|---|---|
| Lisible en texte brut | Non | Oui |
| Mise en forme du texte | Aucun | Basique |
| Images | Non | Non |
| Modification ultérieure | Non modifiable directement | Facile |
| S’ouvre dans un navigateur web | Non | Non |
| Taille de fichier typique | Très petit | Petit |
| Norme ouverte | Non | Oui |
| Idéal pour | Intégration dans des applications | Montage et post-production |
| Date d’introduction | — | 1991 |
| Développeur | Python Software Foundation | Python Software Foundation |
| Type MIME | — | text/x-python |
La base de données ne contient actuellement aucun convertisseur de fichier pyo.