This repository has been archived on 2024-10-22. You can view files and clone it, but cannot push or open issues or pull requests.
spacemacs/contrib/!lang/python/README.md
2015-05-25 00:50:38 -04:00

246 lines
9.8 KiB
Markdown

# Python contribution layer for Spacemacs
![logo_python](img/python.png) ![logo_django](img/django.png)
<!-- markdown-toc start - Don't edit this section. Run M-x markdown-toc/generate-toc again -->
**Table of Contents**
- [Python contribution layer for Spacemacs](#python-contribution-layer-for-spacemacs)
- [Description](#description)
- [Install](#install)
- [Layer](#layer)
- [Anaconda dependencies](#anaconda-dependencies)
- [Automatic buffer formatting on save](#automatic-buffer-formatting-on-save)
- [autoflake](#autoflake)
- [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)
- [Refactoring](#refactoring)
- [Other Python commands](#other-python-commands)
- [Django](#django)
- [Fabric](#fabric)
- [Files](#files)
- [Interactive](#interactive)
- [Server](#server)
- [South/Syncdb](#southsyncdb)
- [Test](#test)
<!-- markdown-toc end -->
## 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][]
- PEP8 compliant formatting via [YAPF][]
- Suppression of unused import with [autoflake][]
## Install
### Layer
To use this contribution add it to your `~/.spacemacs`
```elisp
(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][anaconda-deps] 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`.
```elisp
(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][]:
```sh
pip install autoflake
```
## Key Bindings
### Inferior REPL process
Start a Python or iPython inferior REPL process with <kbd>SPC m s i</kbd>.
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
----------------------|------------------------------------------------------------
<kbd>SPC m s b</kbd> | send buffer and keep code buffer focused
<kbd>SPC m s B</kbd> | send buffer and switch to REPL in insert mode
<kbd>SPC m s f</kbd> | send function and keep code buffer focused
<kbd>SPC m s F</kbd> | send function and switch to REPL in insert mode
<kbd>SPC m s i</kbd> | start inferior REPL process
<kbd>SPC m s r</kbd> | send region and keep code buffer focused
<kbd>SPC m s R</kbd> | send region and switch to REPL in insert mode
<kbd>CTRL+j</kbd> | next item in REPL history
<kbd>CTRL+k</kbd> | previous item in REPL history
### Running Python Script in shell
To run a Python script like you would in the shell press <kbd>SPC m c c</kbd>
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
----------------------|------------------------------------------------------------
<kbd>SPC m c c</kbd> | Execute current file in a comint shell
<kbd>SPC m c C</kbd> | Execute current file in a comint shell and switch to it in `insert state`
**Note** With the universal argument <kbd>SPC u</kbd> 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 <kbd>m t</kbd> or <kbd>m T</kbd>):
No Debug | Description
---------------------|------------------------------------------------------------
<kbd>SPC m t a</kbd> | launch all tests of the project
<kbd>SPC m t b</kbd> | launch all tests of the current buffer (same as module)
<kbd>SPC m t m</kbd> | launch all tests of the current module
<kbd>SPC m t s</kbd> | launch all tests of the current suite
<kbd>SPC m t t</kbd> | launch the current test (function)
Debug | Description
---------------------|------------------------------------------------------------
<kbd>SPC m T a</kbd> | launch all tests of the project in debug mode
<kbd>SPC m T b</kbd> | launch all tests of the current buffer (module) in debug mode
<kbd>SPC m T m</kbd> | launch all tests of the current module in debug mode
<kbd>SPC m T s</kbd> | launch all tests of the current suite in debug mode
<kbd>SPC m T t</kbd> | launch the current test (function) in debug mode
### Refactoring
Key Binding | Description
----------------------|------------------------------------------------------------
<kbd>SPC m r i</kbd> | remove unused imports with [autoflake][]
### Other Python commands
Key Binding | Description
----------------------|------------------------------------------------------------
<kbd>SPC m =</kbd> | Reformat the buffer according to PEP8 using [YAPF][]
<kbd>SPC m d b</kbd> | toggle a breakpoint
<kbd>SPC m g g</kbd> | go to definition using `anaconda-mode-goto` (<kbd>C-o</kbd> to jump back)
<kbd>SPC m h d</kbd> | look for documentation using `helm-pydoc`
<kbd>SPC m h h</kbd> | quick documentation using anaconda
<kbd>SPC m h H</kbd> | open documentation in `firefox` using [pylookup][pylookup]
<kbd>SPC m v</kbd> | activate a virtual environment with [pyenv][pyenv]
<kbd>SPC m V</kbd> | activate a virtual environment with [pyvenv][pyvenv]
### Django
Django related key bindings uses [pony-mode][] and are behind the prefix
<kbd>SPC m j</kbd>.
Configuration options for pony-mode are documented at
[deadpansincerity.com](http://www.deadpansincerity.com/docs/pony/configuration.html)
Manage Django with <kbd>SPC m j m</kbd>.
#### Fabric
Key Binding | Description
----------------------|------------------------------------------------------------
<kbd>mjaf</kbd> | Run a fabric command
<kbd>mjad</kbd> | Deploy project with `fab deploy`
#### Files
Key Binding | Description
----------------------|------------------------------------------------------------
<kbd>mjfs</kbd> | Open the `settings.py` for this project
<kbd>mjfc</kbd> | Interactively display a setting value in the minibuffer
<kbd>mjft</kbd> | Jump to template at point
<kbd>mjfr</kbd> | Jump to the view file that the URL resolves to (experimental)
#### Interactive
Key Binding | Description
----------------------|------------------------------------------------------------
<kbd>mjid</kbd> | Run interpreter for this project's default database as an inferior process
<kbd>mjis</kbd> | 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
----------------------|------------------------------------------------------------
<kbd>mjrd</kbd> | Stop the dev server
<kbd>mjro</kbd> | Open a tab at the dev server
<kbd>mjrr</kbd> | Restart the dev server (works better with django_extras/werkzeug)
<kbd>mjru</kbd> | Start or open the dev server
<kbd>mjrt</kbd> | Open a second server with a "throwaway" host/port
#### South/Syncdb
Key Binding | Description
----------------------|------------------------------------------------------------
<kbd>mjsc</kbd> | Convert an existing app to south
<kbd>mjsh</kbd> | Create migration for modification
<kbd>mjsi</kbd> | Run the initial south migration for an app
<kbd>mjsm</kbd> | Migrate an app
<kbd>mjss</kbd> | Run syncdb on the current project
#### Test
Key Binding | Description
----------------------|------------------------------------------------------------
<kbd>mjtd</kbd> | Move down the traceback one level
<kbd>mjte</kbd> | Go to the file and line of the last stack trace in a test buffer
<kbd>mjto</kbd> | Open the file in a traceback at the line specified
<kbd>mjtt</kbd> | Run the test(s) given by `command`
<kbd>mjtu</kbd> | 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
[anaconda-deps]: https://github.com/proofit404/anaconda-mode/blob/master/requirements.txt
[YAPF]: https://github.com/google/yapf
[autoflake]: https://github.com/myint/autoflake