60a97ea2de
Extra parens made the truthness of `t` to not manifest. Important fix for debugging python. |
||
---|---|---|
.. | ||
extensions | ||
img | ||
config.el | ||
extensions.el | ||
funcs.el | ||
packages.el | ||
README.md |
Python contribution layer for Spacemacs
Table of Contents
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
(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