Message de service aux débutants en Python


Ces informations sont éparpillées sur le net, et même sur le blog. Mais c’est un peu le package que tout dev Python qui se lance doit apprendre petit à petit. Alors je vais vous épargner les recherches.

Ne prenez pas ça comme une checklist qu’il faut impérativement faire avant de programmer. Coder est le plus important pour apprendre. Tout le reste est facultatif. Mais cet article liste des raccourcis qui vous seront utiles au fur et à mesure de votre progression.

Réponse aux grandes questions de la vie

J’installe Python avec quoi ?

Sous Linux, avec votre gestionnaire de paquet. Mais souvenez-vous que la 2.7 est installée par défaut.

Sous Mac, avec homebrew. Mais souvenez-vous que la 2.7 est installée par défaut. Vous aurez besoin de GCC. Mais pas besoin de télécharger xcode pour ça, il y a des solutions légères.

Sous Windows, utilisez miniconda. L’installeur officiel est pas mal, mais miniconda vous aidera beaucoup pour plein de choses, comme installer facilement les extensions compilées type scipy ou QT. Et cochez toujours l’option pour ajouter Python au SYSTEM PATH, sinon il faudra le faire à la main et c’est relou.

Python 2 or Python 3 ?

Python 3 sauf si :

  • Vous êtes certain de devoir utiliser une lib en rouge dans cette liste.
  • Vous êtes sur Mac ou Linux, et vous avez pas envie de vous faire chier à installer Python 3 alors que Python 2.7 est déjà là par défaut.
  • Vous n’avez pas accès à Python 3.3 ou 3.4. Les premières versions de Python 3 sont horribles.

Dans tous les cas, souvenez-vous :

  • Qu’on peut installer plusieurs versions en même temps.
  • Que passer de l’un à l’autre n’est pas difficile. On peut même écrire du code compatible avec les deux si besoin même si c’est un peu chiant.
  • La commande py permet de choisir quel Python lancer sous Windows (py -2 ou py -3). Sous linux, on peut carrément faire python2 ou python3, ou python3.4.
  • Les environnements virtuels peuvent utiliser une version de Python en particulier avec -p.

Mais c’est quoi cette histoire de CPython, Pypy, IronPython, Jython, Julia, Cython, Nuitka, Hope…

Y a combien de Python bordel ?

Pour vous, un seul : CPython. C’est-à-dire ce que les gens appellent “Python”.

Vous pouvez ignorer le reste. Vous n’avez pas à vous inquiéter de devoir utiliser un autre un jour, devoir passer à un autre, etc. Ce sont juste des bonus qui peuvent aider des gens dans des cas particuliers, rien d’indispensable.

Pip ou easy_install

pip. Installez toujours pip. Utilisez toujours pip. Apprenez à bien utiliser pip avec toutes ses options.

Et souvenez-vous qu’on peut installer un module pour une version de python en particulier en faisant pythonX -m pip ou sous windows, py -x -m pip.

Une exception pour les extensions :

Si vous êtes sous Windows, installer en plus miniconda va vous simplifier énormément la vie pour installer les extensions compilées comme scipy.

Et si vous êtes sous Linux utilisez votre gestionnaire de paquet sans quoi vous allez devoir installer gcc et les headers de Python (package python-dev sous Ubuntu par exemple).

distutils, setuptools ou distribute ?

Setuptools. Le reste a été fusionné ou déprécié.

Python 32 bits ou python 64 bits ?

64 bits. Si vous avez un jour une erreur indébuggable sous windows, testez avec une version 32 bits au cas où. Mais 64 bits reste le choix par défaut.

Quel IDE ?

Aucun IDE n’est nécessaire en Python. On peut coder avec un simple éditeur de texte et la console. Je fais toutes mes formations avec Notepad++ sous Windows, ou Gedit sous Ubuntu.

Vous pouvez donc juste utiliser ce que vous aimez le plus.

Pour UI, PyQt, PySide, wxPython, Kivy, PyGTK, Tkinter ?

Tkinter si c’est une UI simple (quelques fenêtres, quelques formulaires). WxPython si c’est un programme complexe en Python 2.7. C’est le meilleur équilibre poids/puissance. Kivy si ça doit tourner sur mobile.

PyQt/PySide sont les plus puissants, mais beaucoup plus dur à utiliser. Ca vaut rarement le coup, sauf que pour le moment, c’est la seule solution solide en Python 3.

Les outils qui changent la vie

On peut coder avec Python sans tout ça, mais la vie est plus belle avec.

  • pip permet d’installer facilement plein de libs.
  • ipython, un shell Python qui facilite l’expérimentation de code.
  • pdb permet de débugger votre programme. pdb++ en bonus.
  • virtualenv vous permet d’avoir des installations de Python différentes pour chaque projet avec des libs isolées. Avec pew en bonus.
  • grin, pour rechercher un mot dans votre code. Mieux que grep et marche sous Windows.
  • pyped, pour remplacer sed, cut, awk et bien plus par du python simple, y compris sous Windows

Si vous êtes sous windows, souvenez-vous que Shift avant un clic droit ajoute des options supplémentaires au menu contextuel de votre explorateur de fichiers. Avec notamment “Ouvrir une invite de commande dans ce dossier”. Sous Mac il y a un réglage pour ça. Sous Ubuntu il y a un plugin.

Ah oui, et sous windows, utilisez une console décente.

Bonnes habitudes

Réglez votre éditeur de texte pour utiliser 4 espaces pour indenter. Si vous préférez les tabs, réglez aussi votre éditeur de texte pour utiliser 4 espaces pour indenter.

Tant qu’on y est, apprenez à gérer votre encoding. Particulièrement, assurez-vous de savoir où changer l’encoding des caractères de vos fichiers dans les options de votre éditeur de texte. Et mettez le par défaut sur UTF8. Utilisez toujours des chaînes de caractères unicode et le header # coding: utf-8 .

Utilisez print avec la syntaxe sous forme de fonction. Et faites des imports absolus, jamais relatifs.

En fait, si vous êtes en Python 2.7, activez le plus de comportements de Python 3 possible en faisant les imports de __future__.

Pour un débutant, voici donc un bon template de fichier Python 2.7 par défaut :

# -*- coding: utf-8 -*-
 
"""
    Documenter le module ici.
"""
 
from __future__ import (unicode_literals, absolute_import,
                        print_function, division)
 
 
def main():
    """ Run the whole program """
    # votre code ici
    print('Hello !')
 
if __name__ == '__main__':
    main()
  • unicode_literals : active les chaînes unicode par défaut.
  • absolute_import : active les imports absolus par défaut.
  • print_function : remplace le mot clé print par la fonction print().
  • division : / devient la division classique, // la division entière.

Pour Python 3, c’est plus simple :

"""
    Documenter le module ici.
"""
 
 
def main():
    """ Run the whole program """
    print('Hello !')
 
if __name__ == '__main__':
    main()

Utilisez toujours des dates en UTC. Ne convertissez qu’à l’affichage. Donc ça veut dire utiliser datetime.utcnow() et non datetime.now()

Des libs qu’on les aime

Les modules disponibles avec Python sont ce qu’on appelle la bibliothèque standard, ou stdlib. Il y a beaucoup de modules très utiles.

Néanmoins certains doivent avoir la priorité dans votre apprentissage. Les plus importants sont :

Quelques modules sont vieux, et ça se sent dans leur facilité d’usage. Pour cette raison, si vous utilisez beaucoup certains d’entre eux, des alternatives installables avec pip peuvent vous simplifier énormément la vie :

Stdlib Lib tierce partie plus pratique
datetime arrow
os, sys, shutil path.py
argparse docopt
unittest pytest. En fait ne faites jamais de tests unitaires sans pytest. La vie est trop courte.
urllib2 requests

Y a des priorités dans la vie

Les trucs importants à apprendre en Python (qui sont typiques de ce langage, j’entends) avant de se lancer dans la sophistication :

  • Toutes les choses ont une valeur booléenne. Savoir en tirer parti.
  • Connaitre toutes les méthodes des strings.
  • Les exceptions : try, except, else, finally, raise.
  • Maitriser le slicing et l’unpacking.
  • L’opérateur splat.
  • Manipuler des fichiers.
  • Les dictionnaires et les sets. Vous les sous-utilisez. Étudiez-les.
  • Bien maitriser l’itération : for, else, continue, break.
  • Bien maitriser l’itération (bis) : zip, enumerate, sorted, reversed, any, all…
  • Bien maitriser l’itération (ter) : les listes en intension.
  • Bien maitriser l’itération (vous-ai je dit que c’était tout en Python ?) : les générateurs.
  • Les regex. C’est chiant. Je sais. Mais c’est trop puissant pour être ignoré.

Avec ça vous pouvez aborder sereinement tout problème. Le reste, c’est du bonus.

Typiquement, on peut repousser à bien plus tard l’apprentissage de :

30 thoughts on “Message de service aux débutants en Python

  • un fidele lecteur..

    Encore un article indispensable ! je viens maintenant rarement sur le site préférant te lire de chez moi mais je voulais m’arrêter pour te remercier de tant de compétences partagées. Les gens qui font de ce monde un monde meilleur sont rares, tu en fais partie : Merci !

    PS : Je préfères généralement sucer en privé, mais tu l’as bien mérité ! :PP

    Jouyeux Noël ! Bonne Apnée ! Et Chaudes Sautées !

  • Shywim

    Pour l’explorateur Windows, Shift tout court (+ clic droit) fonctionne aussi pour afficher les options supplémentaires dans le menu contextuel. :)

  • Anne Onyme

    Excellent article.

    Je suis régulièrement le blog mais commente très rarement et je pense qu’un merci est plus que mérité.

    Alors merci.

  • Sam Post author

    @un fidele lecteur.., @Anne Onyme : les merci, ça fait du bien.

    @Shywim : indeed :)

  • mothsART

    Comme toujours, du bon et du très bon!

    Tu as l’art de résumer les petits réflexes qu’on prend dans notre apprentissage de python. (combien de temps j’ai mis pour trancher sur ddistutils, setuptools ou distribute, rah)

    J’ai apprécié découvrir consoleZ : ça va bien me servir au boulot (oui, je bosse sous windows… monde de merde)

    Pour les IDE : python n’en nécessite pas (à la différence d’autre langages tel que C# ou Java qui sont tellement verbeux qu’un IDE est une nécessité) mais c’est quand même plus pratique sur de gros projets.

    L’IDE, c’est un peu comme les frameworks : ça améliore la productivité si t’es déjà à l’aise avec les principes sous-jacent… sinon, c’est l’effet inverse.

  • Jojo

    Coucou,

    Juste au passage, le lien associé à la lib “requests” mène à un article sur pytest.

    Merci pour vot’ (gros) boulot !

  • NicoS

    Maitriser le slicing slicing et l’unpacking -> Maitriser le slicing et l’unpacking

    Perso je rajoutterai le shell ipython (et du coup ipdb) qui est fantastique pour

    avoir de bonnes traces quand son programme plante
    apprendre une lib qu’on ne connait pas en explorant les méthodes/fonctions et la doc associée

  • ashgan

    et avec tout ca, il ne manque plus que de la doc bien foutue!

    Je propose de rajouter dans la liste un https://www.google.sn/?q=site:sametmax.com+mon_souci voire un lien vers l’archive du blog pour les cas d’urgence

  • Dylann

    C’est le cadeau noël pour les futurs développeurs qui auront pris comme bonne résolution 2015 de se mettre à utiliser un chouette langage ? :)

    Merci pour cet article et la découverte de grin.

    Lorsque j’ai débuté, et encore maintenant, il y a deux fonctions que j’utilise très très souvent et qui me font gagner un temps fou : help et dir.

    test = 'plop'

    dir(test)

    help(test.rstrip)

    Bien plus rapide que “taptap dans big brother, clic sur lien, scroll scroll scroll ou clic clic…” :)

  • mothsART

    Pour étendre pbd, il y a pubd : coloration du code + la liste des variable, la stack et les points d’arrêt dans des buffers, c’est juste awesome!

    L’essayer, c’est l’adopter.

    Dylann : pour les help et dir, l’IDE pycharm les lit en live donc pas besoin de lancer ton code pour connaitre les propriétés d’un objet…

    De souvenir, il doit y avoir des plugins emacs/vim/sublime text équivalent.

  • Jean-pat

    Quand même, la completion de code avec un ide comme spyder c’est bien pratique quand on débute et une fois qu’on est habitué …

  • olivier

    les listes en intension -> les listes en intention

    Pour éditer les variables d’environnement sous windows, essayez: http://www.rapidee.com

    C’est portable (toujours quelque part dans un coin de clé USB), ça permet d’insérer des chemins dans le PATH et ça highlight en rouge les chemins invalides. Bref c’est du bon. C’est pas open-source, c’est freeware, mais sur windows, faut quand même pas trop en demander. :)

  • kontre

    Rah, il a 1 ou 2 ans de retard ce post ! J’en ai chié sur certains pojnts notés ici ! Bon, du coup très bon récapitulatif, merci.

    Y’a juste sur docopt/argparse que j’ai tické. J’ai vraiment pas trouvé argparse compliqué, et un des avantage est jsutement que j’ai pas besoin de faire une jolie doc à la main, je donne les éléments et argparse se démerde. En fait j’avais déjà fait une remarque sur l’article de docopt :).

    Sinon j’utilise nosetests pour mes tests, mais uniquement parce que numpy l’utilise et propose des fonctions pour comparer les tableaux, ce qui serait chiant à refaire en assert. Mais c’est un peu hors sujet, en dehors de ça pytest est vraiment supérieur.

    Dernière remarque pour “Vous êtes sur Mac ou Linux, et vous avez pas envie de vous faire chier à installer Python 3 alors que Python 2.7 est déjà là par défaut.” : sous Mac je sais pas, mais hors Redhat/Centos python3 est dispo dans les paquets, c’est vraiment ultra simple à installer. Ca ne me semble pas une raison valable.

  • Seb

    Bonjour,

    personnellement je recommanderai à un débutant sous Windows d’utiliser une distribution scientifique de Python comme Continuum Anaconda http://continuum.io/ou Enthought Python (Canopy) https://enthought.com/

    ça permet d’avoir facilement accès à pas mal de bibliothèque sans se casser la tête via

    conda install paquet ou enpkg paquet

    Merci pour cet article

  • Sabcat

    Ha wé. Bien sympa la check-list. Je commence à coder en Python et c’est vrai que je ne sais pas trop par quel bout attaquer le serpent. La tête ou la queue ? J’ai commencé le livre de G.Swinnen, mais c’est vrai que d’avoir l’avis d’un codeur en direct ça même à des idées qu’on trouve pas dans les livres. Pour l’IDE, j’ai commencé avec Idle, mais je suis vite passé à Geany, puisque je l’utilise sur Debian, (et que je code sur Debian) Il y a des fonctions sympas, un F5 lance le programme dans le terminal avec interpréteur de son choix, entièrement configurable avec un compilateur intégré, ça peut servir si on fait du C, on sait jamais.

    Merci en tout cas pour les infos :)

  • Furankun

    Aaaah cool merci! même après un an à se farcir du serpent ça aide… d’ailleurs même après trois ou cinq ans je pense que ça aurait aidé autant ;)

    J’imagine que tu l’as déjà dit ailleurs, mais pourquoi print en fonction?

  • Sam Post author

    Pour :

    • faciliter la transition vers Python 3
    • ne pas se poser la question de “comment je fais déjà pour ne pas sauter une ligne/changer de séparateur/ecrire dans un autre objet”. Avec la fonction, tout est un paramètre.
    • pouvoir utiliser print comme callback
    • pouvoir utiliser print dans une lambda
  • toub

    j’allais poster un commentaire pour demander des explications supplémentaires sur les avantages de pip par rapport à easy_install, jusque à ce que je me rende compte que c’était déjà fait dans un billet précédent.

    Comme d’hab, excellent article, bien complet ! j’pige pas tout, j’ai pas tout le dans le détail j’avoue, mais ça me fera une bonne boite à idée, j’suis sur que je reviendrai sur cet article de nombreuses fois! Merci!!

  • recher

    Ça c’est un chouette article !

    Petite précision par rapport au 32/64 bits sous windows.

    la librairie pyglet ne fonctionne pas avec le python 2.7.9-64 bits, mais fonctionne avec le 2.7.9-32 bits.

    J’ai le même symptôme que ce qui est décrit ici, mais sous windows :

    http://stackoverflow.com/questions/16308100/enthought-canopy-64bit-on-osx-import-pyglet-gl-failure

    Je me suis pas pris la tête, j’ai installé le python 32 bits à la place, et ça marche.

    Je le dis parce que des tas de gens qui débutent dans la programmation commencent par coder des jeux, et donc installent des librairies comme pygame ou pyglet.

    Et sur mon ancien PC (32 bits), j’avais essayé pyglet avec du python 3, j’y suis pas arrivé non plus.

    Bref : pyglet, je le conseille avec du 2.x en 32 bits, et pas autre chose.

    Oh et sinon, le pip est installé par défaut avec les python récents. Et ça c’est bien cool.

  • Sam Post author

    Ouai, d’où le :

    Si vous avez un jour une erreur indébuggable sous windows, testez avec une version 32 bits au cas où

  • bdbrk

    Merci beaucoup pour ce guide et toutes ces infos !

    ca va m’aider pour approfondire mes connaissances en python !

    (btw j’ai retrouvé votre article sur un autre site web, je ne sais pas si c’est normal mais je tenais à le preciser, si c’est normal désolé !)

  • Sam Post author

    La copie est la forme la plus élevé de compliments :)

    Les articles du blogs sont en creative common, donc tout le monde a le droit de les copier. Néanmoins, c’est toujours sympas d’avoir le liens de ces sites pour savoir un peu où on nous retrouve.

  • Tiger-222

    Hop, vu que c’est moins chiant pour tout le monde, tu pourrais modifier la ligne qui spécifie l’encodage du document: # coding: utf-8

    Les nouveaux prendront directement la bonne habitude :)

  • sylvie

    bonjour,

    je suis debutante avec pycharm et lorsque j’ai tenté de faire un save as de mon premier scrip, ca tout planté. Mon Pycharm me dit tout le temps que je fais des erreurs de syntaxe et autre alors que c’est faux. Mon programme ne fonctionne plus tjrs des messages d’erreurs dans toutes mes lignes. Peut-on faire quelque chose car j ai désinstaller et réinstallé et la nouvelle installation fait meme chose…HELP

  • Sam Post author

    Post ton problème sur indexerror.net, ça sera plus facile de t’aider là bas.

Comments are closed.

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