:lang python

Beautiful is better than ugly

1. Description

Adds Python support to Doom Emacs.

  • Syntax checking (flycheck)
  • Snippets
  • Run tests (nose, pytest)
  • Auto-format (black), requires :editor format
  • LSP integration (mspyls, pyls, or pyright)

1.1. Maintainers

This module has no dedicated maintainers. Become a maintainer?

1.2. Module flags

Python virtual environment support via Conda.
Cython files support via cython-mode.
Enable LSP support for python-mode. Requires :tools lsp and a langserver (supports pyls, mspyls, and pyright).
Python packaging, dependency management, and virtual environment support via Poetry.
Python virtual environment support via pyenv.
Use the pyright LSP server instead of mspyls or pyls. Requires +lsp.

1.4. Hacks

No hacks documented for this module.

2. Prerequisites

This module has no hard prerequisites, but a few soft ones:

  • For this module’s supported test runners:
    • pip install pytest
    • pip install nose
  • The :editor format module uses Black for python files: $ pip install black
  • pyimport requires Python’s module pyflakes: $ pip install pyflakes
  • py-isort requires isort to be installed: $ pip install isort
  • Python virtual environments install instructions at:
  • cython requires Cython

2.1. Language Server Protocol Support

For LSP support the :tools lsp module must be enabled, along with this module’s +lsp flag. By default, it supports mspyls and pyls, in that order. With the +pyright flag, it will try Pyright first.

Each of these servers must be installed on your system via your OS package manager or manually:

  • Install pyls with $ pip install python-language-server[all].
  • Install mspyls with M-x lsp-install-server RET mspyls.
  • Install pyright with $ pip install pyright or $ npm i -g pyright.

3. Usage

This module supports LSP. It requires installation of Python Language Server, Microsoft Language Server, or pyright, see LSP Support.

To enable support for auto-formatting with black enable :editor format in init.el file.

3.1. Keybindings

Binding Description
<localleader> c c Compile Cython buffer
<localleader> i i Insert mising imports
<localleader> i r Remove unused imports
<localleader> i s Sort imports
<localleader> i o Optimize imports
<localleader> t r nosetests-again
<localleader> t a nosetests-all
<localleader> t s nosetests-one
<localleader> t v nosetests-module
<localleader> t A nosetests-pdb-all
<localleader> t O nosetests-pdb-one
<localleader> t V nosetests-pdb-module
<localleader> t f python-pytest-file
<localleader> t k python-pytest-file-dwim
<localleader> t t python-pytest-function
<localleader> t m python-pytest-function-dwim
<localleader> t r python-pytest-repeat
<localleader> t p python-pytest-popup
<localleader> g d anaconda-mode-find-definitions
<localleader> g h anaconda-mode-show-doc
<localleader> g a anaconda-mode-find-assignments
<localleader> g f anaconda-mode-find-file
<localleader> g u anaconda-mode-find-references

4. Configuration

This module has the following variables to set extra arguments to ipython and jupyter shells:

;; add to $DOOMDIR/config.el
(setq +python-ipython-repl-args '("-i" "--simple-prompt" "--no-color-info"))
(setq +python-jupyter-repl-args '("--simple-prompt"))

5. Troubleshooting

There are no known problems with this module. Report one?

6. TODO Appendix

This module has no appendix yet. Write one?