Error éxécution script Python decompiler pour *.pyc
Bonjour à tous et toutes,
Peu habitué à manier des scripts python, mais dans la nécessité d'en utiliser un, je me trouve confronté à une erreur que je ne comprends absolument pas et pour laquelle je fais appel aux connaisseurs...
J'ai donc un script Python compilé, un *.pyc. Je voudrais donc le décompiler afin de retrouver un fichier source en *.py, ce qui me permettra par la suite de réécrire ce script dans un language un peu plus utilisé sous windows tels que le C++, C#, Delphi, etc. (car tout le monde n'est pas prêt à installer un pack Python pour Windows sur son PC juste pour une petite application...).
Après bien des recherches, je tombe sur le script suivant: uncompyle disponible sous le lien suivant:
https://github.com/gstarnberger/uncompyle
que je charge bien évidemment. Ayant Python 2.7.1 (et sur une autre machine une version 3.X.X - bref le pb n'est pas faute à une version de Python puisque de toutes les façons on peut encore télécharger et installer des archives du site Python la version dont on a besoin...), je tente de faire fonctionner ce script et j'ai cette erreur:
Citation:
Traceback (most recent call last):
File "uncompyle2", line 48, in <module>
from uncompyle2 import main, verify
ImportError: No module named uncompyle2
Voici pour info le début du script Python:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
"""
Usage: uncompyle [OPTIONS]... [ FILE | DIR]...
Examples:
uncompyle foo.pyc bar.pyc # uncompyle foo.pyc, bar.pyc to stdout
uncompyle -o . foo.pyc bar.pyc # uncompyle to ./foo.dis and ./bar.dis
uncompyle -o /tmp /usr/lib/python1.5 # uncompyle whole library
Options:
-o <path> output decompiled files to this path:
if multiple input files are decompiled, the common prefix
is stripped from these names and the remainder appended to
<path>
uncompyle -o /tmp bla/fasel.pyc bla/foo.pyc
-> /tmp/fasel.dis, /tmp/foo.dis
uncompyle -o /tmp bla/fasel.pyc bar/foo.pyc
-> /tmp/bla/fasel.dis, /tmp/bar/foo.dis
uncompyle -o /tmp /usr/lib/python1.5
-> /tmp/smtplib.dis ... /tmp/lib-tk/FixTk.dis
-c <file> attempts a disassembly after compiling <file>
-d do not print timestamps
-p <integer> use <integer> number of processes
-r recurse directories looking for .pyc and .pyo files
--verify compare generated source with input byte-code
(requires -o)
--help show this message
Debugging Options:
--showasm -a include byte-code (disables --verify)
--showast -t include AST (abstract syntax tree) (disables --verify)
Extensions of generated files:
'.dis' successfully decompiled (and verified if --verify)
'.dis_unverified' successfully decompile but --verify failed
'.nodis' uncompyle failed (contact author for enhancement)
"""
Usage_short = \
"decomyple [--help] [--verify] [--showasm] [--showast] [-o <path>] FILE|DIR..."
import sys, os, getopt
import os.path
from uncompyle2 import main, verify
import time
if sys.version[:3] != '2.7':
print >>sys.stderr, 'Error: uncompyle2 requires Python 2.7.'
sys.exit(-1)
... |
Bref on voit dans le fichier README.TXT du site précité que le script en fait s'appelle uncompyler puisque:
Usage
-----
uncompyler -h prints short usage
uncompyler --help prints long usage
Dans la brève explication mise en commentaire dans le script téléchargé: uncompyle2 on peut lire:
Citation:
Usage: uncompyle [OPTIONS]... [ FILE | DIR]...
Ma question est donc en fin de compte comment et avec quoi se lance ce script ? manque t'il quelque chose ? car le moins que l'on puisse dire c'est que c'est loin d'être très clair cette affaire en Python ! :calim2:
Merci pour des éclaircissement et bonne continuation.
Installer python sous windows n'est pas indispensable
Bonjour,
Citation:
J'ai donc un script Python compilé, un *.pyc. Je voudrais donc le décompiler afin de retrouver un fichier source en *.py, ce qui me permettra par la suite de réécrire ce script dans un language un peu plus utilisé sous windows tels que le C++, C#, Delphi, etc. (car tout le monde n'est pas prêt à installer un pack Python pour Windows sur son PC juste pour une petite application...).
C'est vrai que windows ne vient pas par défaut avec une version de python
Cependant, si c'est pour éviter de le faire systématiquement pour une ou des
applications occasionnelle, pourquoi ne pas les figer avec cx_Freeze ou py2exe ?
Cela va générer un exécutable windows autonome + quelques fichiers de dépendance. Avec ça, il n'y plus besoin d'installer python ni les packages dont dépend l'appli
Cela étant, que ce soit pour figer l'application python ou l'écrire dans un autre langage, le mieux est de partir des souces. C'est fort bien de décompiler, mais si votre script fait appel a des packages (dont certains en c++) que vous ne connaissez, que ferez-vous ?
Les scripts python sont en général sous une licence libre. Donc, les sources doivent exister quelque part. Si ce n'est pas le cas, bonjour la galère.
En espérant vous avoir été utile, à plus tard