Problème de PATH

Temps de lecture : < 1 minute

Un phénomène curieux constaté dans Emacs : malgré l'installation de tous les bons modules avec pip, impossible de les utiliser pour contrôler le code python.
Lors de l'utilisation d'une commande flake8 dans le terminal embarqué :

flake8 pygame_board.py
/bin/bash: flake8 : commande introuvable

Pourtant, la même commande faite dans le terminal du système d'exploitation se déroule correctement :

Ce n'est donc pas vraiment une commande introuvable, c'est plutôt une commande pas trouvé par Emacs.
Pourtant, j'avais modifié le fichier .bashrc pour qu'il puisse utiliser les modules python chargé dans le répertoire /home/user/.local/bin.

# add local path
PATH=$PATH:$HOME/.local/bin

Puis taper source .bashrc dans un terminal afin de charger la modification.

Nature du problème

Le problème est qu'Emacs ne lit pas le fichier .bashrc.
L'information est disponible dans le fichier .profile mais ni Debian, ni emacs ne vont lire dedans.

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

Passer en mode commande dans emacs (Alt+!) et taper la commande :

echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/sbin:/usr/sbin:/sbin

Résolution

Il faut installer le package exec-path-from-shell, ensuite, il suffit d'ajouter ces lignes dans le fichier de configuration .emacs :

;; initialize PATH
(when (memq window-system '(mac ns x))
  (exec-path-from-shell-initialize))

C'est une configuration qui fonctionne avec Linux ou Mac OS.

Test avec la commande du shell : echo $PATH :

  • Avant l'installation du package exec-path-from-shell : /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/sbin:/usr/sbin:/sbin
  • Après l'activation du package : /home/olivier/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/sbin:/usr/sbin:/sbin

Le répertoire /home/user/.local/bin contient tous les modules python installés via la commande pip dont flake8.

Source