# Python contribution layer for Spacemacs
![logo_python](img/python.png) ![logo_django](img/django.png)
**Table of Contents**
- [Python contribution layer for Spacemacs](#python-contribution-layer-for-spacemacs)
- [Description](#description)
- [Install](#install)
- [Key Bindings](#key-bindings)
- [Inferior REPL process](#inferior-repl-process)
- [Running Python Script in shell](#running-python-script-in-shell)
- [Testing in Python](#testing-in-python)
- [Other Python commands](#other-python-commands)
- [Django](#django)
- [Fabric](#fabric)
- [Files](#files)
- [Interactive](#interactive)
- [Server](#server)
- [South/Syncdb](#southsyncdb)
- [Test](#test)
## Description
This layer adds support for the Python language.
Features:
- Auto-completion using [anaconda-mode][]
- Code Navigation using [anaconda-mode][]
- Documentation Lookup using [anaconda-mode][] and [pylookup][]
- Test Runner using [nose.el][]
- Virtual Environment using [pyvenv][] and [pyenv][]
- semantic mode is enabled
- Django support via [pony-mode][]
## Install
To use this contribution add it to your `~/.spacemacs`
```elisp
(setq-default dotspacemacs-configuration-layers '(python))
```
## 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][nose] as a test runner. An improved version of
[nose.el][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
### Other Python commands
Key Binding | Description
----------------------|------------------------------------------------------------
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][pylookup]
SPC m v | activate a virtual environment with [pyenv][pyenv]
SPC m V | activate a virtual environment with [pyvenv][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](http://www.deadpansincerity.com/docs/pony/configuration.html)
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
[anaconda-mode]: https://github.com/proofit404/anaconda-mode
[pyvenv]: https://github.com/jorgenschaefer/pyvenv
[pyenv]: https://github.com/yyuu/pyenv
[pylookup]: https://github.com/tsgates/pylookup
[nose]: https://github.com/nose-devs/nose/
[nose.el]: https://github.com/syl20bnr/nose.el
[pony-mode]: https://github.com/davidmiller/pony-mode