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