Est-il possible de décompiler un fichier .pyc compilé en un fichier .py?


Réponses:


169

Uncompyle6 fonctionne pour Python 3.x et 2.7 - option recommandée car c'est l'outil le plus récent, visant à unifier les fourches précédentes et se concentrant sur les tests unitaires automatisés. La page GitHub contient plus de détails.

  • si vous utilisez Python 3.7+, vous pouvez également essayer decompile3 , un fork d'Uncompyle6 se concentrant sur 3.7 et plus.
  • soulevez des problèmes GitHub sur ces projets si nécessaire - les deux exécutent des suites de tests unitaires sur une gamme de versions de Python

L'ancien Uncompyle2 ne prend en charge que Python 2.7. Cela a bien fonctionné pour moi il y a quelque temps pour décompiler le bytecode .pyc en .py, alors que unpyclib s'est écrasé avec une exception.

Avec tous ces outils, vous récupérez votre code avec les noms de variables, mais sans les commentaires.


7
Merci beaucoup. J'avais accidentellement supprimé mon fichier .py au lieu de .pyc. Cela m'a évité d'avoir à le réécrire à partir de zéro.
avmohan

21
Pour ceux d'entre vous ici parce que vous avez accidentellement supprimé le mauvais fichier, je recommande fortement le contrôle de source!
Andrew Palmer

30

Oui, vous pouvez l'obtenir avec unpyclibqui peut être trouvé sur pypi .

$ pip install unpyclib

Ensuite, vous pouvez décompiler votre fichier .pyc

$ python -m unpyclib.application -Dq path/to/file.pyc

20
J'ai essayé cela et il s'est écrasé avec une exception, sur un tout petit fichier sans code complexe (Django settings.py) - uncompyle2 a bien fonctionné à la place. -1 pour cette raison.
RichVel

9
Il s'est écrasé dans Python 3.6 dans lib \ site-packages \ unpyclib \ applcation.py avec print __copyright- pourquoi utilise-t-il la version Python 2.7 de printsans parenthèses?
David Ching

1
unpyclibLa première et la dernière version de @DavidChing datent de 2009 , on peut dire que c'est un programme uniquement Python 2.
Boris

28

Vous pouvez essayer Easy Python Decompiler . Il est basé sur Decompyle ++ et Uncompyle2. Il prend en charge la décompilation des versions 1.0-3.3 de python

Remarque: je suis l'auteur de l'outil ci-dessus.


5
Il fait son travail. Bon travail. BTW, avez-vous écrit cet outil en python?
shinzou

1
A bien fonctionné pour moi (glisser-déposer facile). Il est vrai qu'une distribution Linux serait bien, mais ce n'est pas si difficile d'ouvrir une boîte Windows.
Brian Jackson

Dernière sortie en 2015 et ressemble à une source fermée?
Boris


4

Oui .

J'utilise uncompyle6 decompile (supporte même le dernier Python 3.8.0):

uncompyle6 utils.cpython-38.pyc > utils.py

et le python d'origine et le python décompilé comparant ressemblent à ceci:

pyc décompiler les utilitaires

donc vous pouvez voir, presque le même effet de décompilation est TRÈS BON .


3

Oui c'est possible.

Il existe un décompilateur Python (.PYC) open-source parfait, appelé Decompyle ++ https://github.com/zrax/pycdc/

Decompyle ++ vise à traduire le code d'octet Python compilé en code source Python valide et lisible par l'homme. Alors que d'autres projets ont atteint cet objectif avec un succès varié, Decompyle ++ est unique en ce sens qu'il cherche à prendre en charge le byte-code de n'importe quelle version de Python.


2
Bien que pycdc soit bon, ce n'est pas parfait. Si vous regardez github.com/zrax/pycdc/issues, il y a plus de 50 types de problèmes de décompilation. Ceci est cependant réparti sur les 16 versions environ de python, et le langage et le code ont radicalement changé. Il se peut que pour les choses que vous avez essayées, vous n'ayez pas trouvé de problème. Cependant, à mon avis, pour classer quelque chose comme "parfait", il faudrait prendre par exemple toute la bibliothèque Python pour chaque version, la décompiler et lui faire passer ses propres tests correctement. Aucun décompilateur ne peut encore faire cela.
rocky

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.