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 script pour le transformer en code Python 3.x.

Il ne fonctionne que en ligne de commande dans un terminal.

2-Installation :

2to3 est généralement installé lorsque vous installez l'interpréteur Python. Si ce n’est pas le cas, saisissez dans un terminal :

sudo apt install 2to3

2to3 est un programme python qui se trouve dans le répertoire /usr/share/bash-completion/completions d’ Ubuntu qui est le dossier des scripts du terminal. Il s’exécute maintenant avec la version 3.x de python.

Il est exécuté par défaut avec la version 2.7 de python. Dans ce cas la transformation de votre code source se fera de la version 2.x à la version 3.x

Ces programmes ne font que lancer le programme principal (main) de la bibliothèque lib2to3 qui se trouve dans le répertoire /usr/lib/python3.x/lib2to3 ou x est le numéro de version.

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.x qui se trouvent dans le dossier /usr/lib/python3.x/lib2to3/fixes.

Il est préférable d'installer la dernière version de python 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'.

3-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.

Voir un exemple en détail

L’idéal se serrait de traduire tous les fichiers d'un projet d'un dossier (même si il n’y a pas de modification à y faire), dans un autre dossier, en ajoutant un fichier avec le détail des modifications effectués par 2to3. Pour cela vous devez saisir :

2to3 –output-dir=version-python3 -W -n version-python2/. >> modifications.txt

ou ceci si vous vous trouvez déjà dans le dossier ‘version-python2’ :

2to3 –output-dir=../version-python3 -W -n . >> modifications.txt

où les programmes en version python 2.x avant transformation se trouvent dans le dossier 'version-python2' et seront dans le dossier 'version-python3' une fois converti.

4-Les options :

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

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

Par défaut tous les scriptes du répertoire '/fixes' seront appliqués.

D'autres options peuvent vous être utiles :

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

-d ou --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 ou --list-fixes
Liste toutes les instruction transformés par 2to3 (les "fixes" ou FIX changements)
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.
Chacun des intitulés précédents représentent un script python qui change le code source de votre programme.

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 ou --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édemment. 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 ou --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 ou --processes=PROCESSES
Lance 2to3 en même temps qu'un autre programme (PROCESSES).

-p ou --print-function
Modifie la syntaxe tel que la fonction print() soit une fonction

-v ou –-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 ou –-write

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

-n ou –-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 modifiés dans un autre dossier avec l’option -o ou que vous avez déjà réalisé une sauvegarde des fichiers d'origines.

-o OUTPUT_DIR ou --output-dir=OUTPUT_DIR

Met les fichiers remaniés dans le répertoire OUTPUT_DIR au lieu d'écraser les fichiers d'origines. 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 remaniés. 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 de commande :

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