spacemacs/contrib/!lang/python
Tu Do 7299cc59b6 [Fix #1813] Insert tab in Python REPL
Currently, when tab is pressed, spaces are inserted. It makes Python
REPL unable to recognize code indentation. We must use tab to indent.
Setting indent-tabs-mode is buffer local, so it does not affect its
value in other buffers.
2015-06-02 22:43:25 -04:00
..
extensions Prefix categories with ! 2015-05-25 00:50:38 -04:00
img Prefix categories with ! 2015-05-25 00:50:38 -04:00
config.el Enable company in Python REPL for code completion 2015-05-25 23:39:05 -04:00
extensions.el Prefix categories with ! 2015-05-25 00:50:38 -04:00
funcs.el Prefix categories with ! 2015-05-25 00:50:38 -04:00
packages.el [Fix #1813] Insert tab in Python REPL 2015-06-02 22:43:25 -04:00
README.md Prefix categories with ! 2015-05-25 00:50:38 -04:00

Python contribution layer for Spacemacs

logo_python logo_django

Table of Contents

Description

This layer adds support for the Python language.

Features:

Install

Layer

To use this contribution add it to your ~/.spacemacs

(setq-default dotspacemacs-configuration-layers '(python))

Anaconda dependencies

anaconda-mode tries to install the dependencies itself but sometimes it does not work and you may encounter the following message when opening a python buffer:

Blocking call to accept-process-output with quit inhibited!!

To fix this, install the anaconda-mode dependencies by hand:

pip install  jedi==0.8.1 json-rpc==1.8.1 service_factory==0.1.2

Source: https://github.com/proofit404/anaconda-mode#issues

Automatic buffer formatting on save

To enable automatic buffer formatting on save with YAPF set the variable python-enable-yapf-format-on-save to t.

(setq-default dotspacemacs-configuration-layers '(
  (python :variables python-enable-yapf-format-on-save t)))

autoflake

To be able to suppress unused imports easily, install autoflake:

pip install autoflake

Key Bindings

Inferior REPL process

Start a Python or iPython inferior REPL process with SPC m s i. If ipython is available in system executable search paths, ipython will be used to launch python shell; otherwise, default python interpreter will be used. You may change your system executable search path by activating a virtual environment.

Send code to inferior process commands:

Key Binding       |                 Description

----------------------|------------------------------------------------------------ SPC m s b | send buffer and keep code buffer focused SPC m s B | send buffer and switch to REPL in insert mode SPC m s f | send function and keep code buffer focused SPC m s F | send function and switch to REPL in insert mode SPC m s i | start inferior REPL process SPC m s r | send region and keep code buffer focused SPC m s R | send region and switch to REPL in insert mode CTRL+j | next item in REPL history CTRL+k | previous item in REPL history

Running Python Script in shell

To run a Python script like you would in the shell press SPC m c c to start the Python script in comint mode. This is useful when working with multiple Python files since the REPL does not reload changes made in other modules.

Key Binding       |                 Description

----------------------|------------------------------------------------------------ SPC m c c | Execute current file in a comint shell SPC m c C | Execute current file in a comint shell and switch to it in insert state

Note With the universal argument SPC u you can enter a new compilation command.

Testing in Python

Spacemacs uses nose as a test runner. An improved version of nose.el is shipped with Spacemacs, this version adds:

  • windows support
  • test suite support

The root of the project is detected with a .git directory or a setup.cfg file.

Test commands (start with m t or m T):

No Debug         |                 Description

---------------------|------------------------------------------------------------ SPC m t a | launch all tests of the project SPC m t b | launch all tests of the current buffer (same as module) SPC m t m | launch all tests of the current module SPC m t s | launch all tests of the current suite SPC m t t | launch the current test (function)

 Debug           |                 Description

---------------------|------------------------------------------------------------ SPC m T a | launch all tests of the project in debug mode SPC m T b | launch all tests of the current buffer (module) in debug mode SPC m T m | launch all tests of the current module in debug mode SPC m T s | launch all tests of the current suite in debug mode SPC m T t | launch the current test (function) in debug mode

Refactoring

Key Binding       |                 Description

----------------------|------------------------------------------------------------ SPC m r i | remove unused imports with autoflake

Other Python commands

Key Binding       |                 Description

----------------------|------------------------------------------------------------ SPC m = | Reformat the buffer according to PEP8 using YAPF SPC m d b | toggle a breakpoint SPC m g g | go to definition using anaconda-mode-goto (C-o to jump back) SPC m h d | look for documentation using helm-pydoc SPC m h h | quick documentation using anaconda SPC m h H | open documentation in firefox using pylookup SPC m v | activate a virtual environment with pyenv SPC m V | activate a virtual environment with pyvenv

Django

Django related key bindings uses pony-mode and are behind the prefix SPC m j.

Configuration options for pony-mode are documented at deadpansincerity.com

Manage Django with SPC m j m.

Fabric

Key Binding       |                 Description

----------------------|------------------------------------------------------------ mjaf | Run a fabric command mjad | Deploy project with fab deploy

Files

Key Binding       |                 Description

----------------------|------------------------------------------------------------ mjfs | Open the settings.py for this project mjfc | Interactively display a setting value in the minibuffer mjft | Jump to template at point mjfr | Jump to the view file that the URL resolves to (experimental)

Interactive

Key Binding       |                 Description

----------------------|------------------------------------------------------------ mjid | Run interpreter for this project's default database as an inferior process mjis | Open a Python shell with the current pony project's context loaded. If the project has the django_extras package installed, then use the excellent shell_plus command. Otherwise, fall back to manage.py shell

Server

Key Binding       |                 Description

----------------------|------------------------------------------------------------ mjrd | Stop the dev server mjro | Open a tab at the dev server mjrr | Restart the dev server (works better with django_extras/werkzeug) mjru | Start or open the dev server mjrt | Open a second server with a "throwaway" host/port

South/Syncdb

Key Binding       |                 Description

----------------------|------------------------------------------------------------ mjsc | Convert an existing app to south mjsh | Create migration for modification mjsi | Run the initial south migration for an app mjsm | Migrate an app mjss | Run syncdb on the current project

Test

Key Binding       |                 Description

----------------------|------------------------------------------------------------ mjtd | Move down the traceback one level mjte | Go to the file and line of the last stack trace in a test buffer mjto | Open the file in a traceback at the line specified mjtt | Run the test(s) given by command mjtu | Move up the traceback one level