Quelques bonnes raisons de plus d’utiliser iPython 7


Le shell Python est vraiment pratique pour expérimenter, apprendre le langage, tester un snippet vitos ou administrer son site à distance. Mais iPython, ola, iPython, il déchire sa génitrice avec une poutrelle en verre pilé.

Voici quelques commandes qui vous donneront moult raisons de plus pour très vite installer ce shell alternatif.

Autocall

Taper des parenthèses et des guillemets, c’est sooooooo 1995. iPython peut vous les rajouter automatiquement dans les appels de fonctions, il faut juste préfixer de “/”, “,” ou “;” votre appel de fonction pour qu’il fasse la conversion:

/f 1,2 => f(1,2)
,f 1 2 => f("1","2")
;f 1 2 => f("1 2")

Accès au shell système

Préfixez votre commande d’un “!” bien couillu, et iPython va vous exécuter ça dans le shell système (par exemple bash) et vous retourner le résulat:

>>> ! cat /etc/fstab | grep 'ext4'
UUID=e33c5b98-1570-44d6-a32f-5e7970e1e588 /               ext4    errors=remount-ro 0       1

Oui, oui, on est dans un shell Python là. Ou comment bien faire chier la coloration syntaxique de votre blog.

Et on peut mettre tout ça dans une variable et le traiter en Python derrière:

>>> files = !ls
>>> [f.upper() for f in files]
['BUREAU', 'DOCUMENTS', 'EXAMPLES.DESKTOP', 'IMAGES', 'MOD\xc3\xa8LES', 'MUSIQUE', 'PUBLIC', 'T\xc3\xa9L\xc3\xa9CHARGEMENTS', 'UBUNTU ONE', 'VID\xc3\xa9OS',]

A noter que tout est exécuté dans un autre process, ainsi !cd n’aura aucun effet. Mais tout est prévu: %cd et %pwd proxient tout ça vers os.chdir et os.getcwd :-)

Debugger

Entrez %timeit expression pour qu’il qu’iPython vous l’exécute 10000000 fois et vous donne sa performance.

>>> %timeit x=2**100
10000000 loops, best of 3: 22.5 ns per loop

Autre commande: %pdb vous lancera automatiquement votre débuggeur favoris si une exception se lève durant votre session.

Se faciliter la vie

%edit ouvre un editeur (par défault VI sous nunux, mais c’est configurable), et si vous sauvegardez, le contenu tapé est récupéré et exécuté par iPython. Génial pour les bouts de code trop relou à taper sur le prompt.

%gui qt|wx|gtk lance l’intégration de la main loop d’un des toolkits graphiques afin pour de pouvoir faire mumuse avec des widgets sans bloquer votre shell.

Vous étiez vous demandé pourquoi le prompt iPython était plein de In et de Out, et pas de >>> ? Parce que tout l’historique est numéroté, et accessible:

In [38]: 1 + 1
Out[38]: 2
 
In [39]: In[38]
Out[39]: u'1 + 1'
 
In [40]: Out[38]
Out[40]: 2

Mais vous pouvez aussi utiliser %doctest_mode qui donne à votre prompt un air de shell Python normal. L’avantage ? On peut copier le contenu d’un autre shell dedans (et donc d’une doctest) avec les chevrons !

In [49]: %doctest_mode
Exception reporting mode: Plain
Doctest mode is: ON
>>> >>> for pom in ('pom', 'pom', 'pom', 'pom'):
...     ...     print pom
...     ... 
pom
pom
pom
pom

7 thoughts on “Quelques bonnes raisons de plus d’utiliser iPython

  • JEEK

    P’tain, c’est paaaaas bieeeeeeen de m’exciter le neurone en plein week-end et début de vacances ; ah non…c’est pas bien !

    C’est pas comme ça que je vais décoller du PC… :-D

    Et sinon :

    Oui, oui, on est dans un shell Python là. comment bien faire chier la coloration syntaxique de votre blog.

    Un “ou” tout court devrait suffire…

    Merci à vous deux pour vos articles ; sérieux ça démoule du cake et j’adore !

  • TrollMan

    C’est fou qu’il faille apprendre toute une syntaxe spécifique à iPython pour palier aux déficits intrinsèques du langage.

    Comme tu le dis si bien :

    Taper des parenthèses […], c’est sooooooo 1995

    Je demande au Père Noel de vous apporter un Ruby comme cadeau, comme ça, plus de parenthèses !

    Ho ho ho ! :B

  • Sam Post author

    Lol. Sauter les parenthèses, c’est comme faire import *, ça a sa place dans le shell, pas dans un code en prod.

    L’absence de parenthèses obligatoires est vraiment quelque chose que je n’aime pas dans ruby, ça rend le code beaucoup plus dur à lire car on change de context sans indicateur pour savoir qu’on le fait (l’absence de parenthèse n’étant remplacé par rien comme l’indentation remplacerait par exemple les {}).

    C’est très chiant, et demande de se concentrer dès qu’on lit le code d’un autre.

    En fait je trouve que l’amélioration s’est faite à l’envers: ils ont viré les parenthèses, mais gardé les mots clé de block. Avoir des mots clés de block facultatifs aurait été plus malin: on rend le code plus lisible, et on garde la puissance fonctionnelle de Ruby que n’a pas Python.

  • desfrenes

    Je ne connais pas bien ipython mais je trouve la complétion de bpython vraiment top… le genre de complétion qui me ferait me passer de pycharm si on la retrouvait dans vim.

  • N.

    La commande magique %load est géniale aussi pour tester un bout de code qui traine sur le net.

    %load url-du-code-python.py
    et voilà que le code est exécuté depuis IPython sans se fatiguer avec des copier-coller.

  • Soli

    @desfrenes vim avec jedi-vim (et python-mode) et un bpython qui tourne dans un split ConqueTerm, c’est pas loin du bonheur…

  • Sam Post author

    @N. Pas mal du tout !

    @Soli: ouai jedi-vim est presque le seul qui fournisse une completion du code potable avec ulipad. C’est triste.

Leave a comment

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.