Retour


2to3

1-Présentation :

2to3 est un programme Python qui lit un fichier en code source Python 2.x et applique une série de scripte pour le transformer en code Python 3.x.

Installation :

2to3 est généralement installé lorsque vous installez l'interpréteur Python.

2to3 est un programme python qui se trouve dans le répertoire usr/bin qui est exécuté par défaut avec la version 2.7 de python. Il existe aussi dans ce répertoire les fichiers 2to3-2.7 et 2to3-3.4 qui s'exécutent respectivement avec les versions 2.7 et 3.4 de python.
Vous pouvez donc utiliser 2to3 ou 2to3-2.7 qui sont identiques, si vous avez installez la version python 2.7 sur votre ordinateur ou utiliser 2to3-3.4 si vous avez installez la version python 3.4. Dans le premier cas la transformation de votre code source se fera de la version 2.x à la version 3.0. Et dans le deuxième cas de la version 2.x à la version 3.4.

Ces programmes ne font que lancer le programme principal (main) de la bibliothèque lib2to3 qui se trouve soit dans le répertoire /usr/lib/python2.7/lib2to3 pour l’exécution de 2to3 ou 2to3-2.7 soit dans le répertoire /usr/lib/python3.4/lib2to3 pour l’exécution de 2to3-3.4.

Le logiciel 2to3 fonctionne de la manière suivante : il parcourt tous les modules python correspondent aux modifications de la version 2.x à la version 3.0 qui se trouvent dans le dossier /usr/lib/python2.7/lib2to3/fixes ou bien, aux modifications de la version 2.x à la version 3.4 qui se trouvent dans le dossier /usr/lib/python3.4/lib2to3/fixes.

Il est préférable d'installer la version de python 3.4 et d'utiliser 2to3-3.4 pour avoir un code source compatible avec la dernière version de python.

Remarque : Ce programme peut être utilisé pour modifier n'importe quel code source python de manière automatique. Il suffit d'ajouter ou de remplacer les scriptes du répertoire 'fixes'.

2-Utilisation :

2to3 ne s’exécute qu'en ligne de commande. Pour effectuer les conversions, dans un terminal saisissez la ligne :

'2to3 exemple.py' où exemple.py est le programme à convertir.

Ou 2to3-3.4 si vous avez déjà installé la version 3.4 de Python sur votre ordinateur.

Les modifications du fichier exemple.py seront affiché à l'écran mais le fichier ne sera pas modifié.
Il est interessant de conserver les modifications qu'il va effectuer dans un fichier texte. Pour cela saisissez la ligne :
'2to3 exemple.py >> diff.txt' pour rediriger tous l'affichage de l'écran dans le fichier diff.txt.


Certaines options permettent d'adapter le travail de 2to3 :


Syntaxe de l'utilisation en ligne de commande : 2to3 [options] fichier|répertoire ...

Par exemple, si vous voulez traduire tous les fichiers d'un projet d'un répertoire, saisissez en ligne de commande :
'2to3 –output-dir=version-python3/moncode -W -n version-python2/moncode'
où les programmes en version python 2.x avant transformation se trouvent dans le répertoire 'version-python2/moncode' et seront dans le répertoire 'version-python3/moncode' une fois converti. Par défaut tous les scriptes du répertoire '/fixes' seront appliqués.

D'autres options peuvent vous être utiles :

-h, --help pour afficher l'aide en anglais du logiciel 2to3 et quitter. (voir le tableau de l'aide en ligne)

-d, --doctests_only modifie seulement les fichiers doctests spécifiés. Cela ne nécessite pas que les 'doctests' soit des modules python valide.Par exemple, 'doctests' peuvent être des documents restructuredtext et être également remaniés avec cette option.

-l, --list-fixes Liste toutes les transformations possibles (FIX)
Par exemple après la commande '2to3 -l' en version Python 3.4 on a :
Available transformations for the -f/--fix option: ( transformations possibles avec l'option -f  :)
apply
basestring
buffer
callable
dict
except
exec
execfile
exitfunc
filter
funcattrs
future
getcwdu
has_key
idioms
import
imports
imports2
input
intern
isinstance
itertools
itertools_imports
long
map
metaclass
methodattrs
ne
next
nonzero
numliterals
operator
paren
print
raise
raw_input
reduce
renames
repr
set_literal
standarderror
sys_exc
throw
tuple_params
types
unicode
urllib
ws_comma
xrange
xreadlines
zip

51 changements (FIX) possibles.
Pour plus de détails sur ses changements de la version 2.x de python à la version 3.1 de python, voir le document 'Moving from Python 2 to Python 3' extrait du livre en anglais Programming in Python 3 (Second Edition) de Mark Summerfield.
Ou bien le site français de Sam et Max http://sametmax.com/passage-a-python-3/

-f FIX, --fix=FIX Chaque FIX spécifie une transformation. Ils sont prédéfinis dans le répertoire 'fixes' et la liste est disponible avec l'option -l vu précédement. Par défaut, toutes les modifications sont appliqués.
Par exemple si vous voulez lancer les modifications des mises à jour (FIX) uniquement des instructions 'imports' et 'has_key', saisissez '2to3 -f imports -f has_key exemple.py'. Certaines mises à jour sont explicites, ce qui signifie qu'elles ne sont pas exécutées par défaut et doivent être inscrits sur la ligne de commande à exécuter. Par exemple, ici, en plus des mises à jour par défaut 'all', la mise à jour 'idioms' est exécuté : '2to3 -f all -f idioms exemple.py'

-x NOFIX, --nofix=NOFIX Empêcher une transformation d'être exécuté. C'est le contraire de l'option -f.
Par exemple si vous voulez lancer toutes les modifications des mise à jour (FIX) sauf l'instruction 'apply' saisissez '2to3 -x apply exemple.py'

-j PROCESSES, --processes=PROCESSES Lance 2to3 en même temps qu'un autre programme (PROCESSES).

-p, --print-function Modifie la le code pour que la syntaxe print() soit une fonction.

-v, --verbose : Cette option permet l'affichage à l'écran de plus d'informations sur le processus de traduction. --no-diffs : supprime l'affichage à l'écran des différences du processus de traduction.

-w, --write Garde les fichiers d'origine dans un fichier de sauvegarde qui aura l'extension '.bak'

-n, --nobackups : Permet de ne pas enregistrer les sauvegardes des fichiers modifiés. L'option est requis si vous utilisez celle-ci pour créer des fichiers de sauvegarde et n'a pas de sens si vous ne voulez pas écraser les fichiers d'origines.

-o OUTPUT_DIR, --output-dir=OUTPUT_DIR Met les fichiers de sortie dans le répertoire OUTPUT_DIR au lieu d'écraser les fichiers d'entrée. Requières l'option -n.

-W, --write-unchanged-files Réécrire tous les fichiers, même si aucune modification n'a été nécessaire (s'utilise avec l'option --output-dir); impliques l'option -w.

--add-suffix=ADD_SUFFIX Ajouter cette chaîne à tous les noms de fichiers de sortie. L'option -n est nécessaire lorsque vous spécifiez que les sauvegardes ne sont pas nécessaires pour l'écriture de noms de fichiers différents. Ex : '2to3 -n -W --add-suffix='3' exemple.py' écrira un fichier converti nommé 'example.py3'.

Parfois 2to3 trouvera un endroit dans votre code source qui doit être changé, mais 2to3 ne peut pas réparer automatiquement. Dans ce cas, 2to3 affichera un avertissement sous la 'diff' d'un fichier. Vous devrez traiter l'avertissement pour avoir du code 3.x conforme.

Pour plus de précision voir ce lien sur le site officiel python (en anglais).

Aide en ligne :

Options

Aide anglaise

Aide française

-h, --help

show this help message and exit

affiche ce message d'aide et quitte

-d, --doctests_only

Fix up doctests only

Modifie seulement dans un document teste

-f FIX, --fix=FIX

Each FIX specifies a transformation; default: all

Spécifie chaque modifications (FIX) qui seront transformés ; par défaut : FIX=all (toutes)

-j PROCESSES, --processes=PROCESSES

Run 2to3 concurrently

Exécutez 2to3 en même temps qu'un autre processus

-x NOFIX, --nofix=NOFIX

Prevent a transformation from being run

Empêche la transformation NOFIX d'être réalisé

-l, --list-fixes

List available transformations

Affiche la liste des transformations possibles

-p, --print-function

Modify the grammar so that print() is a function

Modifie la syntaxe pour que print() devienne une fonction

-v, --verbose

More verbose logging

Affichage des changements plus détaillés

--no-diffs

Don't show diffs of the refactoring

Ne pas afficher les différences des transformations en cours

-w, --write

Write back modified files

Sauvegarder les fichiers qui seront modifiés

-n, --nobackups

Don't write backups for modified files

Ne pas faire de sauvegardes des fichiers à modifier

-o OUTPUT_DIR, --output-dir=OUTPUT_DIR

Put output files in this directory instead of overwriting the input files. Requires -n.

Mettre les fichiers transformés dans ce répertoire (OUTPUT_DIR) au lieu d'écraser les fichiers sources. Requière -n

-W, --write-unchanged-files

Also write files even if no changes were required (useful with --output-dir); implies -w.

Et aussi la réécriture des fichiers, même si aucune modification n'a été nécessaire (utile avec – output-dir) ; implique -w

--add-suffix=ADD_SUFFIX

Append this string to all output filenames. Requires -n if non-empty. ex: --add-suffix='3' will generate .py3 files.

Ajouter cette chaîne (ADD_SUFFIX) à tous les fichiers transformés. Requière -n si non vide. Ex : --add-suffix= '3 ' génèrera des fichiers .PY3.



restructuredtext est un simple texte mais structuré, (fichier .rst reST restructuredtext) utilisé pour réaliser des documentations de programme python et les convertir dans des formats utiles tels que HTML, XML, LaTeX, avec les outils Docutils. Pour plus de détail voir http://connect.ed-diamond.com/GNU-Linux-Magazine/GLMF-104/Grokking-Docutils-et-reStructuredText