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:

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 : Sélectionner tout - Visualiser dans une fenêtre à part
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:

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 !

Merci pour des éclaircissement et bonne continuation.