In order to ensure that the processes executed by Emacs and its packages, such as Flycheck or Flymake, can access the Python modules of a project, it is essential to correctly configure the $PYTHONPATH
environment variable.
This article provides a solution by introducing a .dir-locals.el
file that adds the directory path of .dir-locals.el
to the $PYTHONPATH
environment variable.
The .dir-locals.el
file should be placed in the root directory of a Python project.
File name: .dir-locals.el
;; -*- mode: emacs-lisp; -*-
;; File: .dir-locals.el
;; Description:
;; This file adds the path where `.dir-locals.el` is located to the
;; `$PYTHONPATH` environment variable to ensure that processes executed by
;; Emacs and its packages, such as Flycheck or Flymake, can access the Python
;; modules of a project.
;;
;; Author: James Cherti
;; License: MIT
;; URL: https://www.jamescherti.com/emacs-dir-locals-add-path-to-pythonpath/
((python-mode . ((eval . (progn
(let ((project_path
(car (dir-locals-find-file
(buffer-file-name))))
(python_path_env (getenv "PYTHONPATH")))
(setq-local process-environment
(cons
(concat "PYTHONPATH="
project_path
(if python_path_env
(concat ":" python_path_env)
""))
process-environment))))))))
Code language: Lisp (lisp)