add notes about vim usage with syntastic
[python-guide.git] / docs / dev / env.rst
1 Your Development Environment
2 ============================
3
4
5 Text Editors
6 ::::::::::::
7
8 Just about anything which can edit plain text will work for writing Python code,
9 however, using a more powerful editor may make your life a bit easier.
10
11
12 VIM
13 ---
14
15 Vim is a text editor which uses keyboard shortcuts for editing instead of menus
16 or icons. There exist a couple of plugins and settings for the VIM editor to
17 aid python development. If you only develop in Python, a good start is to set
18 the default settings for indentation and linewrapping to values compliant with
19 `PEP 8 <http://www.python.org/dev/peps/pep-0008/>`_. In your home directory,
20 open a file called `.vimrc` and add the following lines: ::
21
22     set textwidth=79
23     set shiftwidth=4
24     set tabstop=4
25     set expandtab
26     set softtabstop=4
27     set shiftround
28
29 With these settings, newlines are inserted after 79 characters and indentation
30 is set to 4 spaces per tab. If you also use VIM for other languages, there is a
31 handy plugin at indent_, which handles indentation settings for python source
32 files.
33
34 There is also a handy syntax plugin at syntax_ featuring some improvements over
35 the syntax file included in VIM 6.1.
36
37 These plugins supply you with a basic environment for developing in Python.
38 To get the most out of Vim, you should continually check your code for syntax
39 errors and PEP8 compliance. Luckily PEP8_ and Pyflakes_ will do this for you.
40 If your VIM is compiled with `+python` you can also utilize some very handy
41 plugins to do these checks from within the editor.
42
43 For PEP8 checking, install the vim-pep8_ plugin, and for pyflakes you can
44 install vim-pyflakes_. Now you can map the functions `Pep8()` or `Pyflakes()`
45 to any hotkey or action you want in Vim. Both plugins will display errors at
46 the bottom of the screen, and provide an easy way to jump to the corresponding
47 line. It's very handy to call these functions whenever you save a file. In
48 order to do this, add the following lines to your `vimrc`::
49
50     autocmd BufWritePost *.py call Pyflakes()
51     autocmd BufWritePost *.py call Pep8()
52
53 If you are already using syntastic_ you can enable it to run Pyflakes on write
54 and show errors and warnings in the quickfix window. An example configuration
55 to do that which also shows status and warning messages in the statusbar would be::
56
57     set statusline+=%#warningmsg#
58     set statusline+=%{SyntasticStatuslineFlag()}
59     set statusline+=%*
60     let g:syntastic_auto_loc_list=1
61     let g:syntastic_loc_list_height=5
62
63
64 .. _indent: http://www.vim.org/scripts/script.php?script_id=974
65 .. _syntax: http://www.vim.org/scripts/script.php?script_id=790
66 .. _Pyflakes: http://pypi.python.org/pypi/pyflakes/
67 .. _vim-pyflakes: https://github.com/nvie/vim-pyflakes
68 .. _PEP8: http://pypi.python.org/pypi/pep8/
69 .. _vim-pep8: https://github.com/nvie/vim-pep8
70 .. _syntastic: https://github.com/scrooloose/syntastic
71
72 .. todo:: add supertab notes
73
74 TextMate
75 --------
76
77 "`TextMate <http://macromates.com/>`_ brings Apple's approach to operating
78 systems into the world of text editors. By bridging UNIX underpinnings and GUI,
79 TextMate cherry-picks the best of both worlds to the benefit of expert
80 scripters and novice users alike."
81
82 Sublime Text
83 ------------
84
85 "`Sublime Text <http://www.sublimetext.com/>`_ is a sophisticated text editor
86 for code, html and prose. You'll love the slick user interface and
87 extraordinary features."
88
89 Sublime Text has excellent support for editing Python code and uses Python for
90 its plugin API.
91
92 `Sublime Text 2 <http://www.sublimetext.com/blog/articles/sublime-text-2-beta>`_
93 is currently in beta.
94
95 IDEs
96 ::::
97
98 PyCharm / IntelliJ IDEA
99 -----------------------
100
101 `PyCharm <http://www.jetbrains.com/pycharm/>`_ is developed by JetBrains, also
102 known for IntelliJ IDEA. Both share the same code base and most of PyCharm's
103 features can be brought to IntelliJ with the free `Python Plug-In <http://plugins.intellij.net/plugin/?id=631/>`_.
104
105
106 Eclipse
107 -------
108
109 The most popular Eclipse plugin for Python development is Aptana's
110 `PyDev <http://pydev.org>`_.
111
112
113 Komodo IDE
114 -----------
115 `Komodo IDE <http://www.activestate.com/komodo-ide>`_ is developed by
116 ActiveState and is a commercial IDE for Windows, Mac
117 and Linux.
118
119
120 Spyder
121 ------
122
123 `Spyder <http://code.google.com/p/spyderlib/>`_ an IDE specifically geared
124 toward working with scientific python libraries (namely `Scipy <http://www.scipy.org/>`_).
125 Includes integration with pyflakes_, `pylint <http://www.logilab.org/857>`_,
126 and `rope <http://rope.sourceforge.net/>`_.
127
128 Spyder is open-source (free), offers code completion, syntax highlighting,
129 class and function browser, and object inspection.
130
131
132 WingIDE
133 -------
134
135 `WingIDE <http://wingware.com/>`_ a python specific IDE.   Runs for Linux,
136 Windows, and Mac (as an X11 application, which frustrates some Mac users).
137
138
139 Interpreter Tools
140 :::::::::::::::::
141
142
143 virtualenv
144 ----------
145
146 Virtualenv is a tool to keep the dependencies required by different projects
147 in separate places, by creating virtual Python environments for them.
148 It solves the "Project X depends on version 1.x but, Project Y needs 4.x"
149 dilemma and keeps your global site-packages directory clean and manageable.
150
151 `virtualenv <http://www.virtualenv.org/en/latest/index.html>`_ creates
152 a folder which contains all the necessary executables to contain the
153 packages that a Python project would need. An example workflow is given.
154
155 Install virtualenv::
156
157     $ pip install virtualenv
158
159
160 Create a virtual environment for a project::
161
162     $ cd my_project
163     $ virtualenv venv
164
165 ``virtualenv venv`` will create a folder in the currect directory
166 which will contain the Python executable files, and a copy of the ``pip``
167 library which you can use to install other packages. The name of the
168 virtual environment (in this case, it was ``venv``) can be anything;
169 omitting the name will place the files in the current directory instead.
170
171 In order the start using the virtual environment, run::
172
173     $ source venv/bin/activate
174
175
176 The name of the current virtual environment will now appear on the left
177 of the prompt (e.g. ``(venv)Your-Computer:your_project UserName$``) to
178 let you know that it's active. From now on, any package that you install
179 using ``pip`` will be placed in the venv folder, isolated from the global
180 Python installation. Install packages as usual::
181
182     $ pip install requests
183
184 To stop using an environment simply type ``deactivate``. To remove the
185 environment, just remove the directory it was installed into. (In this
186 case, it would be ``rm -rf venv``).
187
188 Other Notes
189 ~~~~~~~~~~~
190
191 Running ``virtualenv`` with the option ``--no-site-packages`` will not
192 include the packages that are installed globally. This can be useful
193 for keeping the package list clean in case it needs to be accessed later.
194
195 In order to keep your environment consistent, it's a good idea to "freeze"
196 the current state of the environment packages. To do this, run
197
198 ::
199
200     $ pip freeze > requirements.txt
201
202 This will create a ``requirements.txt`` file, which contains a simple
203 list of all the packages in the current environment, and their respective
204 versions. Later, when a different developer (or you, if you need to re-
205 create the environment) can install the same packages, with the same
206 versions by running
207
208 ::
209
210     $ pip install -r requirements.txt
211
212 This can help ensure consistency across installations, across deployments,
213 and across developers.
214
215 Lastly, remember to exclude the virtual environment folder from source
216 control by adding it to the ignore list.
217
218 virtualenvwrapper
219 -----------------
220
221 `Virtualenvwrapper <http://pypi.python.org/pypi/virtualenvwrapper>`_ makes
222 virtualenv a pleasure to use by wrapping the command line API with a nicer CLI.
223
224 ::
225
226     $ pip install virtualenvwrapper
227
228
229 Put this into your `~/.bash_profile` (Linux/Mac) file:
230
231 ::
232
233     $ export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'
234
235 This will prevent your virtualenvs from relying on your (global) site packages
236 directory, so that they are completely separate..
237
238 Other Tools
239 :::::::::::
240
241 IDLE
242 ----
243
244 `IDLE <http://docs.python.org/library/idle.html>`_ is an integrated
245 development environment that is part of Python standard library. It is
246 completely written in Python and uses Tkinter GUI toolkit. Though IDLE
247 is not suited for full-blown development using Python , it is quite
248 helpful to try out small Python snippets and experiment with different
249 features in Python.
250
251 It provides following features:
252
253 * Python Shell Window (interpreter)
254 * Multi window text editor that colorizes Python code
255 * Minimal debugging facility
256
257
258 IPython
259 -------
260
261 `IPython <http://ipython.org/>`_ provides a rich toolkit to help you make the
262 most out of using Python interactively. Its main components are:
263
264 * Powerful Python shells (terminal- and Qt-based).
265 * A web-based notebook with the same core features but support for rich media,
266   text, code, mathematical expressions and inline plots.
267 * Support for interactive data visualization and use of GUI toolkits.
268 * Flexible, embeddable interpreters to load into your own projects.
269 * Tools for high level and interactive parallel computing.
270
271 ::
272
273     $ pip install ipython
274
275
276
277 BPython
278 -------
279
280 `bpython <http://bpython-interpreter.org/>`_ is an alternative interface to the
281 Python interpreter for Unix-like operating systems. It has the following features:
282
283 * In-line syntax highlighting.
284 * Readline-like autocomplete with suggestions displayed as you type.
285 * Expected parameter list for any Python function.
286 * "Rewind" function to pop the last line of code from memory and re-evaluate.
287 * Send entered code off to a pastebin.
288 * Save entered code to a file.
289 * Auto-indentation.
290 * Python 3 support.
291
292 ::
293
294     $ pip install bpython
295