Difference between revisions of "Python"
(→cscope: grammar) |
(auto insert 'import' statements with rope) |
||
Line 130: | Line 130: | ||
[http://pymacs.progiciels-bpi.ca/index.html Pymacs homepage] | [http://pymacs.progiciels-bpi.ca/index.html Pymacs homepage] | ||
+ | == Auto include import statements == | ||
+ | [[Ropemacs]] (see above) is a plugin for performing python refactorings in emacs. It uses rope library and pymacs. It has '''rope-auto-import''', so if you write | ||
+ | |||
+ | rmtree | ||
+ | |||
+ | and then execute {{Command|rope-auto-import}}, | ||
+ | |||
+ | from shutil import rmtree | ||
+ | |||
+ | is inserted at the top of the file. | ||
+ | |||
+ | Unfortunately Ropemacs can not do non-relative imports, it can only create imports of the "from X import Y" variety (if you type ''shutil.rmtree'' it doesn't write ''import shutil''). | ||
+ | |||
+ | == Sort import statements == | ||
+ | |||
+ | See the '''py-isort''' [[Melpa]] package to automatically sort import statements. | ||
= See also = | = See also = |
Revision as of 10:25, 6 May 2014
Default modes
There are a number of python modes for Emacs. fgallina's python.el is the python.el included in Emacs 24.2 and onwards.
All-in-one solutions
emacs-for-python
emacs-for-python is a bundle of the above modes (and more), and it's an easy way to turn Emacs into a Python IDE.
Elpy
Elpy is a collection of elisp packages for Python too.
https://github.com/jorgenschaefer/elpy/wiki/Features
Auto-Completion
rope & ropemacs
rope is a library for refactoring and manipulating Python code. ropemacs is an Emacs interface to the rope library.
Jedi
Jedi.el is a Python auto-completion package for Emacs. It aims at helping your Python coding in a non-destructive way. It also helps you to find information about Python objects, such as docstring, function arguments and code location.
Jedi is simple to install and it just works.
See screenshots and get the full documentation : http://tkf.github.io/emacs-jedi/released/
Jedi's official page: http://jedi.jedidjah.ch/en/latest/
Installation
Install Jedi.el via el-get, Marmalade or MELPA (see install for more info) and add this to your Emacs configuration:
(add-hook 'python-mode-hook 'jedi:setup) (setq jedi:setup-keys t) ; optional (setq jedi:complete-on-dot t) ; optional
or call M-x jedi:setup
Code Checker
Flymake
flymake is a on-the-fly syntax checker for Emacs. We can use it alongside with flyspell.
To run pep8, pylint, pyflakes and unit-tests (with nose), you can be interested in using flymake-python.
Don't forget about pylint too.
Indexing sources: ctags, cscope, pycscope
etags, ctags
Etags (Exuberant Ctags) generates an index (or tag) file of language objects found in source files that allows these items to be quickly and easily located by a text editor or other utility. A tag signifies a language object for which an index entry is available (or, alternatively, the index entry created for that object). Etags is a multilingual implementation of ctags.
The primary use for the tags files is looking up class/method/function/constant/etc declaration/definitions. Cscope is more powerful (see below).
usage
Generate the tags with this command at the root of your project:
find . -name "*.py" -print | etags -
it creates the file TAGS.
Note that projects like Projectile or Helm provide an integrated use of etags (finding one, re-generating the index, etc).
cscope
cscope is a much more powerful beast. While it operates on more or less the same principle (generating a file of useful metadata) it allows you do some fancier things like find all references to a symbol, see where a function is being invoked, etc.+ (you can find definitions as well).
It was originally designed for C and C++, but thanks to version 0.3 of pycscope, pythonistas can make use of it.
usage
The following commands should get you running:
apt-get install cscope pip install pycscope # in project base dir: find . -name '*.py' > cscope.files cscope -R
now install the xcscope emacs package with ELPA and require it:
(require 'xcscope)
When done, you can either enable the mode with cscope-minor-mode (which will add a menu you are free to explore) or call some functions like M-x cscope-find-global-definition, M-x cscope-find-functions-calling-this-function, etc.
Debugging
Ipdb, ipython debugger
If you call ipdb, the execution will stop and give a nice ipython-looking prompt. Just add `import ipdb; ipdb.set_trace()`
You can use the following to highlight this line, and not forget it :
; Highlight the call to ipdb
; src http://pedrokroger.com/2010/07/configuring-emacs-as-a-python-ide-2/
(defun annotate-pdb ()
(interactive)
(highlight-lines-matching-regexp "import ipdb")
(highlight-lines-matching-regexp "ipdb.set_trace()"))
(add-hook 'python-mode-hook 'annotate-pdb)
pdb track
If you use emacs-for-python given above, you can track your source code while debugging with pdbtrack.
A tool to use in a non-emacs terminal would be pdbpp
Other tools
Pymacs
Pymacs is an Emacs extension that enables the use of Python alongside with Emacs Lisp.
Auto include import statements
Ropemacs (see above) is a plugin for performing python refactorings in emacs. It uses rope library and pymacs. It has rope-auto-import, so if you write
rmtree
and then execute M-x rope-auto-import,
from shutil import rmtree
is inserted at the top of the file.
Unfortunately Ropemacs can not do non-relative imports, it can only create imports of the "from X import Y" variety (if you type shutil.rmtree it doesn't write import shutil).
Sort import statements
See the py-isort Melpa package to automatically sort import statements.
See also
You'll be certainly interested in the following packages (that you will find on ELPA or MELPA):
- Magit, a git interface. Emacs + git is magic : see magit
- Yasnippet, a template system: yasnippet
- virtualenvwrapper, to load a virtualenv (so than you can use it with M-x compile) (available through ELPA)
- helm-pydoc to browse the documentation of installed packages and import one
- py-isort to sort import statements
- pungi to integrate jedi, virtualenv and buildout.
- other ELPA packages
If you're running Emacs 24, check out what is available in ELPA:
- M-x list-packages
- and see flymake-pyhon-pyflakes, flymake-shell, abl-mode (a python TDD minor-mode), nose (easy python test-running in emacs), pyregexp, python-magic and more.