Bpython

Introduction

J'ai déjà présenté un repl en Perl, il y a quelques temps de ça PerlConsole, développé par Sukria, je fais pas mal de Python maintenant, j'en ai donc cherché pour ce langage. L'interpréteur par défaut Python offre un repl, mais je le trouve un peu rudimentaire.

Installation

Pour une distribution Debian et ses dérivées il est packagé, et si vous utiliser l'interprète du système il suffit donc d'utiliser apt-get:

sudo apt-get install bpython

J'ai pour habitude d'utiliser virtualenv qui est vraiment génial, pour lequel je ferai un article plus tard, dans ce cas, il est aussi bien de l'installer par projet, déplacer vous dans le répertoire bin à la racine de votre projet après l'avoir activé et utiliser pip:

source bin/activate
cd Project/bin
./pip install bpython

Utilisation

L'utilisation est vraiment très simple et agréable. Il n'y pas grand chose à connaitre pour l'utiliser, et un récapitulatif des commandes et lister en bas de l'écran. Lorsque vous lancez bpython et que vous commencer à taper le nom d'une méthode vous pourrez bénéficier de la complétion via la tabulation, il va ouvrir une bulle avec les différentes fonctions matchées, ce qui est intéressant c'est qu'il affiche aussi la documentation de la dite fonctions, par exemple:

bpython
>>> set(
┌──────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ set: (obj, ...)                                                                                      │
│ x.__init__(...) initializes x; see help(type(x)) for signature                                       │
└──────────────────────────────────────────────────────────────────────────────────────────────────────┘
>>> date = datetime.datetime.now()
>>> date.
┌──────────────────────────────────────────────────────────────────────────────────────────────────────┐
│astimezone       combine          ctime            date             day              dst              │
│fromordinal      fromtimestamp    hour             isocalendar      isoformat        isoweekday       │
│max              microsecond      min              minute           month            now              │
│replace          resolution       second           strftime         strptime         time             │
│timetuple        timetz           today            toordinal        tzinfo           tzname           │
│utcfromtimestamp utcnow           utcoffset        utctimetuple     weekday          year             │
└──────────────────────────────────────────────────────────────────────────────────────────────────────┘

Ce qui est très intéressant. Ensuite l'autre aspect que je trouve utile, c'est le fait de pouvoir paster directement via une touche ce qui est affiché à l'écran avec F8, il utilise bpaste.net, le pasteur de bpython. Il est aussi possible de nettoyer ce qui est à l'écran avec la touche ctrl+r. La touche F2 permet d'afficher le source d'un module autre point très fort:

bpython
>>> import json
>>> json
r"""JSON (JavaScript Object Notation) <http://json.org> is a subset of
JavaScript syntax (ECMA-262 3rd edition) used as a lightweight data
interchange format.

:mod:`json` exposes an API familiar to users of the standard library
:mod:`marshal` and :mod:`pickle` modules. It is the externally maintained
version of the :mod:`json` library contained in Python 2.6, but maintains
compatibility with Python 2.4 and Python 2.5 and (currently) has
significant performance advantages, even without using the optional C
extension for speedups.

Taper le nom du module appuyer sur F2 un pager s'ouvre avec le code source. Je n'ai bien-sûr pas tout pasté dans l'exemple ci-dessus. En revanche, ça ne fonctionne pas pour les fonctions builtin.

Un autre aspect très bien offert par bpython et de pouvoir sauver ce qui est à l'écran dans un fichier, par exemple:

bpython
>>> import datetime
>>> date = datetime.datetime.now()
>>> print date.hour
23

Il est alors possible de faire ctrl+s pour sauver ces instructions dans un fichier, ce qui va donner:

import datetime
date = datetime.datetime.now()
print date.hour
# OUT: 23

On peut constater des commentaires avec la valeur affichée par le print. Cette fonctionnalité peut s'avérer très utile, lorsqu'on tests des choses, dont on pourrait avoir besoin plus tard.

Conclusion

Un projet très intéressant moins puissant que ipython mais plus userfriendly est très largement suffisant, et beaucoup plus agréable que celui par défaut. Je le recommande vivement à tout développeur Python, qui devrait toujours avoir un terminal d'ouvert sur un repl pour pouvoir tester rapidement des petits bout de codes, fonctions ou méthodes. Je pense que ce petit repl change vraiment la vie d'un développeur.

Vus : 1382
Publié par Hobbestigrou : 195