emacs et Python

Memo sur 2 nouveaux outils : emacs et python.

Depuis quelques mois, je me suis enfin relancé dans un peu de programmation python, en repartant une fois de plus sur le fameux livre de G. Swinnen "Apprendre à programmer avec Python" disponible en version papier et en ligne.

Et tant qu'à faire, je me dis qu'il serait aussi grand que j'apprivoise un peu mieux ce @#!% de emacs. Me voilà donc lancé sur ces deux chantiers et je ne suis pas au bout de mes peines.

pythonlogov.jpgPython old-school

Pour l'approche Python, c'est pour l'instant assez classique, j'ai juste approché la programmation Orienté Objet et le mode graphique avec le old-school Tkinter, mais je compte bien ensuite m'y plonger plus profondément. Les exercices corrigés de GSwinnen sont aussi utiles pour avoir une correction avec une méthode "propre".

emacsv.pngAccroche-toi à emacs, je retire l'échelle !

Concernant le fameux éditeur emacs, c'est une autre affaire. Le problème, c'est qu'il y a déjà quasiment un mode de fonctionnement par utilisateur. emacs tellement modulable que chacun y ajoute sa propre configuration. Sans doute une force, mais il y aurait beaucoup à redire pour permettre aux néophytes de s'approprier l'outil facilement. Je cherche encore un site simple qui explique les bases, en français, mais n'ai pas trouvé (doc partiellement traduite de emacs 21)

Je note ici quelques liens et infos perso que je compléterai au fur et à mesure, mais c'est un peu brouillon. Je précise bien que pas mal de points restent confus pour moi.

Personnaliser emacs

  1. compléter le .emacs ou le .emacs/init.el avec quelques commandes notamment pour l'ajout de dépôts de packages comme (package-initialize)
  2. utiliser des config toutes faites à copier/coller dans le .emacs pour le personnaliser comme le emacs Bootstrap
  3. utiliser les packages intégrés pour les ajouter.

Python et emacs

La doc de référence plutôt obscure

Par exemple pour les dépots ELPA et MELPA et ajout d'elpy :

(require 'package) ;;
(add-to-list 'package-archives
             '("melpa" . "https://melpa.org/packages/"))
(when (< emacs-major-version 24)
  ;; For important compatibility libraries like cl-lib
  (add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/")))
(add-to-list 'package-archives
             '("elpy" . "https://jorgenschaefer.github.io/packages/"))
(package-initialize)

Packages

Quelques commandes de base pour les packages :

M-x list-packages

Choisir pour (i)nstaller, (u)ninstall (si install souhaitée), (d)ésinstaller, (r)afraichir la liste, (U)pgrade, e(x)ecuter.

Certaines fonctionnalités peuvent (doivent) être installées en dehors, dans l'environnement utilisateur, par exemple pour le packages elpy :

 pip install --upgrade pip
/// pip install --user setuptools
///pip install --user  virtualenv jedi epc rope autopep8 yapf flake8 yapf pylint
  • virtualenv : définit un environnement virtuel pour python (pour ne pas "sortir" du dossier)
  • setuptools : ?
  • jedi : ?
  • epc : ?
  • rope : ?
  • autopep8 : ?
  • flake8 : ?
  • yapf : ?
  • pylint : ?

Packages lié à Python à installer :

elpy better-defaults flycheck-pyflakes auto-complete pydoc-info
  • flycheck : vérifie le code à la volée et signale les erreurs
  • auto-complete : complète le code avec TAB
  • better-defaults : propose un choix d'options intéressantes par défaut.
  • pydoc-info : documentation intégrée (mais je ne sais pas m'en servir)

Documentation elpy

virtualenv

Créer un environnement virtuel de travail en rajoutant une variable WORKON_HOME dans le shell. .bashrc Ajouter dans le bashrc :

alias emacs='emacs -nw' 
alias python='/usr/bin/python3'
export PATH=~/.local/bin/:~/bin:$PATH
export WORKON_HOME=~/.virtualenv

Commande de base emacs avec Python :

  • C-c C-< (C->) : dés-indenter
  • C-c C-z : shell python
  • C-c C-c : execute le script en cours
  • C-c C-e : help

Des liens recommandés :