##// END OF EJS Templates
update tornado dependency to 2.1...
MinRK -
Show More
@@ -0,0 +1,12 b''
1 """The IPython HTML Notebook"""
2
3 # check for tornado 2.1.0
4 msg = "The IPython Notebook requires tornado >= 2.1.0"
5 try:
6 import tornado
7 except ImportError:
8 raise ImportError(msg)
9 else:
10 if tornado.version_info < (2,1,0):
11 raise ImportError(msg+", but you have %s"%tornado.version)
12 del msg
@@ -1,441 +1,449 b''
1 1 # -*- coding: utf-8 -*-
2 2 """IPython Test Suite Runner.
3 3
4 4 This module provides a main entry point to a user script to test IPython
5 5 itself from the command line. There are two ways of running this script:
6 6
7 7 1. With the syntax `iptest all`. This runs our entire test suite by
8 8 calling this script (with different arguments) recursively. This
9 9 causes modules and package to be tested in different processes, using nose
10 10 or trial where appropriate.
11 11 2. With the regular nose syntax, like `iptest -vvs IPython`. In this form
12 12 the script simply calls nose, but with special command line flags and
13 13 plugins loaded.
14 14
15 15 """
16 16
17 17 #-----------------------------------------------------------------------------
18 18 # Copyright (C) 2009 The IPython Development Team
19 19 #
20 20 # Distributed under the terms of the BSD License. The full license is in
21 21 # the file COPYING, distributed as part of this software.
22 22 #-----------------------------------------------------------------------------
23 23
24 24 #-----------------------------------------------------------------------------
25 25 # Imports
26 26 #-----------------------------------------------------------------------------
27 27
28 28 # Stdlib
29 29 import os
30 30 import os.path as path
31 31 import signal
32 32 import sys
33 33 import subprocess
34 34 import tempfile
35 35 import time
36 36 import warnings
37 37
38 38 # Note: monkeypatch!
39 39 # We need to monkeypatch a small problem in nose itself first, before importing
40 40 # it for actual use. This should get into nose upstream, but its release cycle
41 41 # is slow and we need it for our parametric tests to work correctly.
42 42 from IPython.testing import nosepatch
43 43 # Now, proceed to import nose itself
44 44 import nose.plugins.builtin
45 45 from nose.core import TestProgram
46 46
47 47 # Our own imports
48 48 from IPython.utils.path import get_ipython_module_path
49 49 from IPython.utils.process import find_cmd, pycmd2argv
50 50 from IPython.utils.sysinfo import sys_info
51 51
52 52 from IPython.testing import globalipapp
53 53 from IPython.testing.plugin.ipdoctest import IPythonDoctest
54 54 from IPython.external.decorators import KnownFailure
55 55
56 56 pjoin = path.join
57 57
58 58
59 59 #-----------------------------------------------------------------------------
60 60 # Globals
61 61 #-----------------------------------------------------------------------------
62 62
63 63
64 64 #-----------------------------------------------------------------------------
65 65 # Warnings control
66 66 #-----------------------------------------------------------------------------
67 67
68 68 # Twisted generates annoying warnings with Python 2.6, as will do other code
69 69 # that imports 'sets' as of today
70 70 warnings.filterwarnings('ignore', 'the sets module is deprecated',
71 71 DeprecationWarning )
72 72
73 73 # This one also comes from Twisted
74 74 warnings.filterwarnings('ignore', 'the sha module is deprecated',
75 75 DeprecationWarning)
76 76
77 77 # Wx on Fedora11 spits these out
78 78 warnings.filterwarnings('ignore', 'wxPython/wxWidgets release number mismatch',
79 79 UserWarning)
80 80
81 81 #-----------------------------------------------------------------------------
82 82 # Logic for skipping doctests
83 83 #-----------------------------------------------------------------------------
84 84
85 85 def test_for(mod, min_version=None):
86 86 """Test to see if mod is importable."""
87 87 try:
88 88 __import__(mod)
89 89 except (ImportError, RuntimeError):
90 90 # GTK reports Runtime error if it can't be initialized even if it's
91 91 # importable.
92 92 return False
93 93 else:
94 94 if min_version:
95 95 return sys.modules[mod].__version__ >= min_version
96 96 else:
97 97 return True
98 98
99 99 # Global dict where we can store information on what we have and what we don't
100 100 # have available at test run time
101 101 have = {}
102 102
103 103 have['curses'] = test_for('_curses')
104 104 have['matplotlib'] = test_for('matplotlib')
105 105 have['pexpect'] = test_for('pexpect')
106 106 have['pymongo'] = test_for('pymongo')
107 107 have['wx'] = test_for('wx')
108 108 have['wx.aui'] = test_for('wx.aui')
109 109 if os.name == 'nt':
110 110 have['zmq'] = test_for('zmq', '2.1.7')
111 111 else:
112 112 have['zmq'] = test_for('zmq', '2.1.4')
113 113 have['qt'] = test_for('IPython.external.qt')
114 have['tornado'] = test_for('tornado')
114
115 try:
116 import tornado
117 if tornado.version_info < (2,1,0):
118 raise ImportError
119 except ImportError:
120 have['tornado'] = False
121 else:
122 have['tornado'] = True
115 123
116 124 #-----------------------------------------------------------------------------
117 125 # Functions and classes
118 126 #-----------------------------------------------------------------------------
119 127
120 128 def report():
121 129 """Return a string with a summary report of test-related variables."""
122 130
123 131 out = [ sys_info(), '\n']
124 132
125 133 avail = []
126 134 not_avail = []
127 135
128 136 for k, is_avail in have.items():
129 137 if is_avail:
130 138 avail.append(k)
131 139 else:
132 140 not_avail.append(k)
133 141
134 142 if avail:
135 143 out.append('\nTools and libraries available at test time:\n')
136 144 avail.sort()
137 145 out.append(' ' + ' '.join(avail)+'\n')
138 146
139 147 if not_avail:
140 148 out.append('\nTools and libraries NOT available at test time:\n')
141 149 not_avail.sort()
142 150 out.append(' ' + ' '.join(not_avail)+'\n')
143 151
144 152 return ''.join(out)
145 153
146 154
147 155 def make_exclude():
148 156 """Make patterns of modules and packages to exclude from testing.
149 157
150 158 For the IPythonDoctest plugin, we need to exclude certain patterns that
151 159 cause testing problems. We should strive to minimize the number of
152 160 skipped modules, since this means untested code.
153 161
154 162 These modules and packages will NOT get scanned by nose at all for tests.
155 163 """
156 164 # Simple utility to make IPython paths more readably, we need a lot of
157 165 # these below
158 166 ipjoin = lambda *paths: pjoin('IPython', *paths)
159 167
160 168 exclusions = [ipjoin('external'),
161 169 pjoin('IPython_doctest_plugin'),
162 170 ipjoin('quarantine'),
163 171 ipjoin('deathrow'),
164 172 ipjoin('testing', 'attic'),
165 173 # This guy is probably attic material
166 174 ipjoin('testing', 'mkdoctests'),
167 175 # Testing inputhook will need a lot of thought, to figure out
168 176 # how to have tests that don't lock up with the gui event
169 177 # loops in the picture
170 178 ipjoin('lib', 'inputhook'),
171 179 # Config files aren't really importable stand-alone
172 180 ipjoin('config', 'default'),
173 181 ipjoin('config', 'profile'),
174 182 ]
175 183
176 184 if not have['wx']:
177 185 exclusions.append(ipjoin('lib', 'inputhookwx'))
178 186
179 187 # We do this unconditionally, so that the test suite doesn't import
180 188 # gtk, changing the default encoding and masking some unicode bugs.
181 189 exclusions.append(ipjoin('lib', 'inputhookgtk'))
182 190
183 191 # These have to be skipped on win32 because the use echo, rm, cd, etc.
184 192 # See ticket https://github.com/ipython/ipython/issues/87
185 193 if sys.platform == 'win32':
186 194 exclusions.append(ipjoin('testing', 'plugin', 'test_exampleip'))
187 195 exclusions.append(ipjoin('testing', 'plugin', 'dtexample'))
188 196
189 197 if not have['pexpect']:
190 198 exclusions.extend([ipjoin('scripts', 'irunner'),
191 199 ipjoin('lib', 'irunner'),
192 200 ipjoin('lib', 'tests', 'test_irunner')])
193 201
194 202 if not have['zmq']:
195 203 exclusions.append(ipjoin('zmq'))
196 204 exclusions.append(ipjoin('frontend', 'qt'))
197 205 exclusions.append(ipjoin('parallel'))
198 206 elif not have['qt']:
199 207 exclusions.append(ipjoin('frontend', 'qt'))
200 208
201 209 if not have['pymongo']:
202 210 exclusions.append(ipjoin('parallel', 'controller', 'mongodb'))
203 211 exclusions.append(ipjoin('parallel', 'tests', 'test_mongodb'))
204 212
205 213 if not have['matplotlib']:
206 214 exclusions.extend([ipjoin('lib', 'pylabtools'),
207 215 ipjoin('lib', 'tests', 'test_pylabtools')])
208 216
209 217 if not have['tornado']:
210 218 exclusions.append(ipjoin('frontend', 'html'))
211 219
212 220 # This is needed for the reg-exp to match on win32 in the ipdoctest plugin.
213 221 if sys.platform == 'win32':
214 222 exclusions = [s.replace('\\','\\\\') for s in exclusions]
215 223
216 224 return exclusions
217 225
218 226
219 227 class IPTester(object):
220 228 """Call that calls iptest or trial in a subprocess.
221 229 """
222 230 #: string, name of test runner that will be called
223 231 runner = None
224 232 #: list, parameters for test runner
225 233 params = None
226 234 #: list, arguments of system call to be made to call test runner
227 235 call_args = None
228 236 #: list, process ids of subprocesses we start (for cleanup)
229 237 pids = None
230 238
231 239 def __init__(self, runner='iptest', params=None):
232 240 """Create new test runner."""
233 241 p = os.path
234 242 if runner == 'iptest':
235 243 iptest_app = get_ipython_module_path('IPython.testing.iptest')
236 244 self.runner = pycmd2argv(iptest_app) + sys.argv[1:]
237 245 else:
238 246 raise Exception('Not a valid test runner: %s' % repr(runner))
239 247 if params is None:
240 248 params = []
241 249 if isinstance(params, str):
242 250 params = [params]
243 251 self.params = params
244 252
245 253 # Assemble call
246 254 self.call_args = self.runner+self.params
247 255
248 256 # Store pids of anything we start to clean up on deletion, if possible
249 257 # (on posix only, since win32 has no os.kill)
250 258 self.pids = []
251 259
252 260 if sys.platform == 'win32':
253 261 def _run_cmd(self):
254 262 # On Windows, use os.system instead of subprocess.call, because I
255 263 # was having problems with subprocess and I just don't know enough
256 264 # about win32 to debug this reliably. Os.system may be the 'old
257 265 # fashioned' way to do it, but it works just fine. If someone
258 266 # later can clean this up that's fine, as long as the tests run
259 267 # reliably in win32.
260 268 # What types of problems are you having. They may be related to
261 269 # running Python in unboffered mode. BG.
262 270 return os.system(' '.join(self.call_args))
263 271 else:
264 272 def _run_cmd(self):
265 273 # print >> sys.stderr, '*** CMD:', ' '.join(self.call_args) # dbg
266 274 subp = subprocess.Popen(self.call_args)
267 275 self.pids.append(subp.pid)
268 276 # If this fails, the pid will be left in self.pids and cleaned up
269 277 # later, but if the wait call succeeds, then we can clear the
270 278 # stored pid.
271 279 retcode = subp.wait()
272 280 self.pids.pop()
273 281 return retcode
274 282
275 283 def run(self):
276 284 """Run the stored commands"""
277 285 try:
278 286 return self._run_cmd()
279 287 except:
280 288 import traceback
281 289 traceback.print_exc()
282 290 return 1 # signal failure
283 291
284 292 def __del__(self):
285 293 """Cleanup on exit by killing any leftover processes."""
286 294
287 295 if not hasattr(os, 'kill'):
288 296 return
289 297
290 298 for pid in self.pids:
291 299 try:
292 300 print 'Cleaning stale PID:', pid
293 301 os.kill(pid, signal.SIGKILL)
294 302 except OSError:
295 303 # This is just a best effort, if we fail or the process was
296 304 # really gone, ignore it.
297 305 pass
298 306
299 307
300 308 def make_runners():
301 309 """Define the top-level packages that need to be tested.
302 310 """
303 311
304 312 # Packages to be tested via nose, that only depend on the stdlib
305 313 nose_pkg_names = ['config', 'core', 'extensions', 'frontend', 'lib',
306 314 'scripts', 'testing', 'utils', 'nbformat' ]
307 315
308 316 if have['zmq']:
309 317 nose_pkg_names.append('parallel')
310 318
311 319 # For debugging this code, only load quick stuff
312 320 #nose_pkg_names = ['core', 'extensions'] # dbg
313 321
314 322 # Make fully qualified package names prepending 'IPython.' to our name lists
315 323 nose_packages = ['IPython.%s' % m for m in nose_pkg_names ]
316 324
317 325 # Make runners
318 326 runners = [ (v, IPTester('iptest', params=v)) for v in nose_packages ]
319 327
320 328 return runners
321 329
322 330
323 331 def run_iptest():
324 332 """Run the IPython test suite using nose.
325 333
326 334 This function is called when this script is **not** called with the form
327 335 `iptest all`. It simply calls nose with appropriate command line flags
328 336 and accepts all of the standard nose arguments.
329 337 """
330 338
331 339 warnings.filterwarnings('ignore',
332 340 'This will be removed soon. Use IPython.testing.util instead')
333 341
334 342 argv = sys.argv + [ '--detailed-errors', # extra info in tracebacks
335 343
336 344 # Loading ipdoctest causes problems with Twisted, but
337 345 # our test suite runner now separates things and runs
338 346 # all Twisted tests with trial.
339 347 '--with-ipdoctest',
340 348 '--ipdoctest-tests','--ipdoctest-extension=txt',
341 349
342 350 # We add --exe because of setuptools' imbecility (it
343 351 # blindly does chmod +x on ALL files). Nose does the
344 352 # right thing and it tries to avoid executables,
345 353 # setuptools unfortunately forces our hand here. This
346 354 # has been discussed on the distutils list and the
347 355 # setuptools devs refuse to fix this problem!
348 356 '--exe',
349 357 ]
350 358
351 359 if nose.__version__ >= '0.11':
352 360 # I don't fully understand why we need this one, but depending on what
353 361 # directory the test suite is run from, if we don't give it, 0 tests
354 362 # get run. Specifically, if the test suite is run from the source dir
355 363 # with an argument (like 'iptest.py IPython.core', 0 tests are run,
356 364 # even if the same call done in this directory works fine). It appears
357 365 # that if the requested package is in the current dir, nose bails early
358 366 # by default. Since it's otherwise harmless, leave it in by default
359 367 # for nose >= 0.11, though unfortunately nose 0.10 doesn't support it.
360 368 argv.append('--traverse-namespace')
361 369
362 370 # use our plugin for doctesting. It will remove the standard doctest plugin
363 371 # if it finds it enabled
364 372 plugins = [IPythonDoctest(make_exclude()), KnownFailure()]
365 373 # We need a global ipython running in this process
366 374 globalipapp.start_ipython()
367 375 # Now nose can run
368 376 TestProgram(argv=argv, addplugins=plugins)
369 377
370 378
371 379 def run_iptestall():
372 380 """Run the entire IPython test suite by calling nose and trial.
373 381
374 382 This function constructs :class:`IPTester` instances for all IPython
375 383 modules and package and then runs each of them. This causes the modules
376 384 and packages of IPython to be tested each in their own subprocess using
377 385 nose or twisted.trial appropriately.
378 386 """
379 387
380 388 runners = make_runners()
381 389
382 390 # Run the test runners in a temporary dir so we can nuke it when finished
383 391 # to clean up any junk files left over by accident. This also makes it
384 392 # robust against being run in non-writeable directories by mistake, as the
385 393 # temp dir will always be user-writeable.
386 394 curdir = os.getcwdu()
387 395 testdir = tempfile.gettempdir()
388 396 os.chdir(testdir)
389 397
390 398 # Run all test runners, tracking execution time
391 399 failed = []
392 400 t_start = time.time()
393 401 try:
394 402 for (name, runner) in runners:
395 403 print '*'*70
396 404 print 'IPython test group:',name
397 405 res = runner.run()
398 406 if res:
399 407 failed.append( (name, runner) )
400 408 finally:
401 409 os.chdir(curdir)
402 410 t_end = time.time()
403 411 t_tests = t_end - t_start
404 412 nrunners = len(runners)
405 413 nfail = len(failed)
406 414 # summarize results
407 415 print
408 416 print '*'*70
409 417 print 'Test suite completed for system with the following information:'
410 418 print report()
411 419 print 'Ran %s test groups in %.3fs' % (nrunners, t_tests)
412 420 print
413 421 print 'Status:'
414 422 if not failed:
415 423 print 'OK'
416 424 else:
417 425 # If anything went wrong, point out what command to rerun manually to
418 426 # see the actual errors and individual summary
419 427 print 'ERROR - %s out of %s test groups failed.' % (nfail, nrunners)
420 428 for name, failed_runner in failed:
421 429 print '-'*40
422 430 print 'Runner failed:',name
423 431 print 'You may wish to rerun this one individually, with:'
424 432 print ' '.join(failed_runner.call_args)
425 433 print
426 434 # Ensure that our exit code indicates failure
427 435 sys.exit(1)
428 436
429 437
430 438 def main():
431 439 for arg in sys.argv[1:]:
432 440 if arg.startswith('IPython'):
433 441 # This is in-process
434 442 run_iptest()
435 443 else:
436 444 # This starts subprocesses
437 445 run_iptestall()
438 446
439 447
440 448 if __name__ == '__main__':
441 449 main()
@@ -1,403 +1,401 b''
1 1 Overview
2 2 ========
3 3
4 4 This document describes the steps required to install IPython. IPython is
5 5 organized into a number of subpackages, each of which has its own dependencies.
6 6 All of the subpackages come with IPython, so you don't need to download and
7 7 install them separately. However, to use a given subpackage, you will need to
8 8 install all of its dependencies.
9 9
10 10
11 11 Please let us know if you have problems installing IPython or any of its
12 12 dependencies. Officially, IPython requires Python version 2.6 or 2.7. There
13 13 is an experimental port of IPython for Python3 `on GitHub
14 14 <https://github.com/ipython/ipython-py3k>`_
15 15
16 16 .. warning::
17 17
18 18 Officially, IPython supports Python versions 2.6 and 2.7.
19 19
20 20 IPython 0.11 has a hard syntax dependency on 2.6, and will no longer work
21 21 on Python <= 2.5.
22 22
23 23 Some of the installation approaches use the :mod:`setuptools` package and its
24 24 :command:`easy_install` command line program. In many scenarios, this provides
25 25 the most simple method of installing IPython and its dependencies. It is not
26 26 required though. More information about :mod:`setuptools` can be found on its
27 27 website.
28 28
29 29 .. note::
30 30
31 31 On Windows, IPython *does* depend on :mod:`setuptools`, and it is recommended
32 32 that you install the :mod:`distribute` package, which improves
33 33 :mod:`setuptools` and fixes various bugs.
34 34
35 35 We hope to remove this dependency in 0.12.
36 36
37 37 More general information about installing Python packages can be found in
38 38 Python's documentation at http://www.python.org/doc/.
39 39
40 40 Quickstart
41 41 ==========
42 42
43 43 If you have :mod:`setuptools` installed and you are on OS X or Linux (not
44 44 Windows), the following will download and install IPython *and* the main
45 45 optional dependencies:
46 46
47 47 .. code-block:: bash
48 48
49 49 $ easy_install ipython[zmq,test]
50 50
51 51 This will get pyzmq, which is needed for
52 52 IPython's parallel computing features as well as the nose package, which will
53 53 enable you to run IPython's test suite.
54 54
55 55 To run IPython's test suite, use the :command:`iptest` command:
56 56
57 57 .. code-block:: bash
58 58
59 59 $ iptest
60 60
61 61 Read on for more specific details and instructions for Windows.
62 62
63 63 Installing IPython itself
64 64 =========================
65 65
66 66 Given a properly built Python, the basic interactive IPython shell will work
67 67 with no external dependencies. However, some Python distributions
68 68 (particularly on Windows and OS X), don't come with a working :mod:`readline`
69 69 module. The IPython shell will work without :mod:`readline`, but will lack
70 70 many features that users depend on, such as tab completion and command line
71 71 editing. If you install IPython with :mod:`setuptools`, (e.g. with `easy_install`),
72 72 then the appropriate :mod:`readline` for your platform will be installed.
73 73 See below for details of how to make sure you have a working :mod:`readline`.
74 74
75 75 Installation using easy_install
76 76 -------------------------------
77 77
78 78 If you have :mod:`setuptools` installed, the easiest way of getting IPython is
79 79 to simple use :command:`easy_install`:
80 80
81 81 .. code-block:: bash
82 82
83 83 $ easy_install ipython
84 84
85 85 That's it.
86 86
87 87 Installation from source
88 88 ------------------------
89 89
90 90 If you don't want to use :command:`easy_install`, or don't have it installed,
91 91 just grab the latest stable build of IPython from `here
92 92 <https://github.com/ipython/ipython/downloads>`_. Then do the following:
93 93
94 94 .. code-block:: bash
95 95
96 96 $ tar -xzf ipython.tar.gz
97 97 $ cd ipython
98 98 $ python setup.py install
99 99
100 100 If you are installing to a location (like ``/usr/local``) that requires higher
101 101 permissions, you may need to run the last command with :command:`sudo`.
102 102
103 103 Windows
104 104 -------
105 105
106 106 .. note::
107 107
108 108 On Windows, IPython requires :mod:`setuptools` or :mod:`distribute`.
109 109
110 110 We hope to remove this dependency in 0.12.
111 111
112 112 There are a few caveats for Windows users. The main issue is that a basic
113 113 ``python setup.py install`` approach won't create ``.bat`` file or Start Menu
114 114 shortcuts, which most users want. To get an installation with these, you can
115 115 use any of the following alternatives:
116 116
117 117 1. Install using :command:`easy_install`.
118 118
119 119 2. Install using our binary ``.exe`` Windows installer, which can be found
120 120 `here <http://ipython.scipy.org/dist/>`_
121 121
122 122 3. Install from source, but using :mod:`setuptools` (``python setupegg.py
123 123 install``).
124 124
125 125 IPython by default runs in a terminal window, but the normal terminal
126 126 application supplied by Microsoft Windows is very primitive. You may want to
127 127 download the excellent and free Console_ application instead, which is a far
128 128 superior tool. You can even configure Console to give you by default an
129 129 IPython tab, which is very convenient to create new IPython sessions directly
130 130 from the working terminal.
131 131
132 132 .. _Console: http://sourceforge.net/projects/console
133 133
134 134 Note for Windows 64 bit users: you may have difficulties with the stock
135 135 installer on 64 bit systems; in this case (since we currently do not have 64
136 136 bit builds of the Windows installer) your best bet is to install from source
137 137 with the setuptools method indicated in #3 above. See `this bug report`_ for
138 138 further details.
139 139
140 140 .. _this bug report: https://bugs.launchpad.net/ipython/+bug/382214
141 141
142 142
143 143 Installing the development version
144 144 ----------------------------------
145 145
146 146 It is also possible to install the development version of IPython from our
147 147 `Git <http://git-scm.com/>`_ source code repository. To do this you will
148 148 need to have Git installed on your system. Then just do:
149 149
150 150 .. code-block:: bash
151 151
152 152 $ git clone https://github.com/ipython/ipython.git
153 153 $ cd ipython
154 154 $ python setup.py install
155 155
156 156 Again, this last step on Windows won't create ``.bat`` files or Start Menu
157 157 shortcuts, so you will have to use one of the other approaches listed above.
158 158
159 159 Some users want to be able to follow the development branch as it changes. If
160 160 you have :mod:`setuptools` installed, this is easy. Simply replace the last
161 161 step by:
162 162
163 163 .. code-block:: bash
164 164
165 165 $ python setupegg.py develop
166 166
167 167 This creates links in the right places and installs the command line script to
168 168 the appropriate places. Then, if you want to update your IPython at any time,
169 169 just do:
170 170
171 171 .. code-block:: bash
172 172
173 173 $ git pull
174 174
175 175 Basic optional dependencies
176 176 ===========================
177 177
178 178 There are a number of basic optional dependencies that most users will want to
179 179 get. These are:
180 180
181 181 * readline (for command line editing, tab completion, etc.)
182 182 * nose (to run the IPython test suite)
183 183 * pexpect (to use things like irunner)
184 184
185 185 If you are comfortable installing these things yourself, have at it, otherwise
186 186 read on for more details.
187 187
188 188 readline
189 189 --------
190 190
191 191 In principle, all Python distributions should come with a working
192 192 :mod:`readline` module. But, reality is not quite that simple. There are two
193 193 common situations where you won't have a working :mod:`readline` module:
194 194
195 195 * If you are using the built-in Python on Mac OS X.
196 196
197 197 * If you are running Windows, which doesn't have a :mod:`readline` module.
198 198
199 199 When IPython is installed with :mod:`setuptools`, (e.g. with `easy_install`),
200 200 readline is added as a dependency on OS X, and PyReadline on Windows, and will
201 201 be installed on your system. However, if you do not use setuptools, you may
202 202 have to install one of these packages yourself.
203 203
204 204 On OS X, the built-in Python doesn't not have :mod:`readline` because of
205 205 license issues. Starting with OS X 10.5 (Leopard), Apple's built-in Python has
206 206 a BSD-licensed not-quite-compatible readline replacement. As of IPython 0.9,
207 207 many of the issues related to the differences between readline and libedit seem
208 208 to have been resolved. While you may find libedit sufficient, we have
209 209 occasional reports of bugs with it and several developers who use OS X as their
210 210 main environment consider libedit unacceptable for productive, regular use with
211 211 IPython.
212 212
213 213 Therefore, we *strongly* recommend that on OS X you get the full
214 214 :mod:`readline` module. We will *not* consider completion/history problems to
215 215 be bugs for IPython if you are using libedit.
216 216
217 217 To get a working :mod:`readline` module, just do (with :mod:`setuptools`
218 218 installed):
219 219
220 220 .. code-block:: bash
221 221
222 222 $ easy_install readline
223 223
224 224 .. note::
225 225
226 226 Other Python distributions on OS X (such as fink, MacPorts and the official
227 227 python.org binaries) already have readline installed so you likely don't
228 228 have to do this step.
229 229
230 230 If needed, the readline egg can be build and installed from source (see the
231 231 wiki page at http://ipython.scipy.org/moin/InstallationOSXLeopard).
232 232
233 233 On Windows, you will need the PyReadline module. PyReadline is a separate,
234 234 Windows only implementation of readline that uses native Windows calls through
235 235 :mod:`ctypes`. The easiest way of installing PyReadline is you use the binary
236 236 installer available `here <https://launchpad.net/pyreadline/+download>`_.
237 237
238 238 nose
239 239 ----
240 240
241 241 To run the IPython test suite you will need the :mod:`nose` package. Nose
242 242 provides a great way of sniffing out and running all of the IPython tests. The
243 243 simplest way of getting nose, is to use :command:`easy_install`:
244 244
245 245 .. code-block:: bash
246 246
247 247 $ easy_install nose
248 248
249 249 Another way of getting this is to do:
250 250
251 251 .. code-block:: bash
252 252
253 253 $ easy_install ipython[test]
254 254
255 255 For more installation options, see the `nose website
256 256 <http://somethingaboutorange.com/mrl/projects/nose/>`_.
257 257
258 258 Once you have nose installed, you can run IPython's test suite using the
259 259 iptest command:
260 260
261 261 .. code-block:: bash
262 262
263 263 $ iptest
264 264
265 265 pexpect
266 266 -------
267 267
268 268 The pexpect_ package is used in IPython's :command:`irunner` script, as well as
269 269 for managing subprocesses. IPython now includes a version of pexpect in
270 270 :mod:`IPython.external`, but if you have installed pexpect, IPython will use
271 271 that instead. On Unix platforms (including OS X), just do:
272 272
273 273 .. code-block:: bash
274 274
275 275 $ easy_install pexpect
276 276
277 277 Windows users are out of luck as pexpect does not run there.
278 278
279 279 Dependencies for IPython.parallel (parallel computing)
280 280 ======================================================
281 281
282 282 :mod:`IPython.kernel` has been replaced by :mod:`IPython.parallel`,
283 283 which uses ZeroMQ for all communication.
284 284
285 285 IPython.parallel provides a nice architecture for parallel computing. The
286 286 main focus of this architecture is on interactive parallel computing. These
287 287 features require just one package: PyZMQ. See the next section for PyZMQ
288 288 details.
289 289
290 290 On a Unix style platform (including OS X), if you want to use
291 291 :mod:`setuptools`, you can just do:
292 292
293 293 .. code-block:: bash
294 294
295 295 $ easy_install ipython[zmq] # will include pyzmq
296 296
297 297 Security in IPython.parallel is provided by SSH tunnels. By default, Linux
298 298 and OSX clients will use the shell ssh command, but on Windows, we also
299 299 support tunneling with paramiko_.
300 300
301 301 Dependencies for IPython.zmq
302 302 ============================
303 303
304 304 pyzmq
305 305 -----
306 306
307 307 IPython 0.11 introduced some new functionality, including a two-process
308 308 execution model using ZeroMQ_ for communication. The Python bindings to ZeroMQ
309 309 are found in the PyZMQ_ project, which is easy_install-able once you have
310 310 ZeroMQ installed. If you are on Python 2.6 or 2.7 on OSX, or 2.7 on Windows,
311 311 pyzmq has eggs that include ZeroMQ itself.
312 312
313 313 IPython.zmq depends on pyzmq >= 2.1.4.
314 314
315 315 Dependencies for the IPython QT console
316 316 =======================================
317 317
318 318 pyzmq
319 319 -----
320 320
321 321 Like the :mod:`IPython.parallel` package, the QT Console requires ZeroMQ and
322 322 PyZMQ.
323 323
324 324 Qt
325 325 --
326 326
327 327 Also with 0.11, a new GUI was added using the work in :mod:`IPython.zmq`, which
328 328 can be launched with ``ipython qtconsole``. The GUI is built on Qt, and works
329 329 with either PyQt, which can be installed from the `PyQt website
330 330 <http://www.riverbankcomputing.co.uk/>`_, or `PySide
331 331 <http://www.pyside.org/>`_, from Nokia.
332 332
333 333 pygments
334 334 --------
335 335
336 336 The syntax-highlighting in ``ipython qtconsole`` is done with the pygments_
337 337 project, which is easy_install-able.
338 338
339 .. _installnotebook:
339 340
340 341 Dependencies for the IPython HTML notebook
341 342 ==========================================
342 343
343 344 The IPython notebook is a notebook-style web interface to IPython and can be
344 345 started withe command ``ipython notebook``.
345 346
346 347 pyzmq
347 348 -----
348 349
349 350 Like the :mod:`IPython.parallel` and :mod:`IPython.frontend.qt.console` packages,
350 351 the HTML notebook requires ZeroMQ and PyZMQ.
351 352
352 353 Tornado
353 354 -------
354 355
355 The IPython notebook uses the Tornado_ project for its HTTP server. As of this
356 writing, we require a development version from github, as version 2.0 is *not
357 sufficient*. You can either clone their git repository yourself and install it
358 manually, or install directly from github with::
356 The IPython notebook uses the Tornado_ project for its HTTP server. Tornado 2.1
357 is required, in order to support current versions of browsers, due to an update
358 to the websocket protocol.
359 359
360 easy_install https://github.com/facebook/tornado/tarball/master
361 360
362
363 361 MathJax
364 362 -------
365 363
366 364 The IPython notebook uses the MathJax_ Javascript library for rendering LaTeX
367 365 in web browsers. Because MathJax is large, we don't include it with
368 366 IPython. Normally IPython will load MathJax from a CDN, but if you have a slow
369 367 network connection, or want to use LaTeX without an internet connection at all,
370 368 we do include a utility to aid in downloading MathJax and installing it into
371 369 the proper location::
372 370
373 371 from IPython.external.mathjax import install_mathjax
374 372 install_mathjax()
375 373
376 374 This function does require write access to the IPython install directory, so if you
377 375 have a system-wide Python install, it may need to be done from a ``sudo python`` session.
378 376
379 377 Browser Compatibility
380 378 ---------------------
381 379
382 380 The notebook uses WebSockets and the flexible box model. These features are
383 381 available in the following browsers:
384 382
385 383 * Chrome.
386 384 * Safari.
387 385 * Firefox 4 and 5. These browsers have WebSocket support, but it is disabled by
388 386 default. You can enable it by entering ``about:config`` in the URL bar and then
389 387 setting ``network.websocket.enabled`` and ``network.websocket.override-security-block``
390 388 to ``true``.
391 389 * Firefox 6. Starting with version 6, Firefox has WebSocket support enabled by default.
392 390
393 391 Internet Explorer 9 does not support WebSockets or the flexible box model, but
394 392 these features should appear in Internet Explorer 10.
395 393
396 394
397 395 .. _ZeroMQ: http://www.zeromq.org
398 396 .. _PyZMQ: https://github.com/zeromq/pyzmq
399 397 .. _paramiko: https://github.com/robey/paramiko
400 398 .. _pygments: http://pygments.org
401 399 .. _pexpect: http://www.noah.org/wiki/Pexpect
402 400 .. _Tornado: http://www.tornadoweb.org
403 401 .. _MathJax: http://www.mathjax.org
@@ -1,213 +1,217 b''
1 1 .. _htmlnotebook:
2 2
3 3 =========================
4 4 An HTML Notebook IPython
5 5 =========================
6 6
7 .. seealso::
8
9 :ref:`Installation requirements <installnotebook>` for the Notebook.
10
7 11 The IPython Notebook consists of two related components:
8 12
9 13 * An JSON based Notebook document format for recording and distributing
10 14 Python code and rich text.
11 15 * A web-based user interface for authoring and running notebook documents.
12 16
13 17 The Notebook can be used by starting the Notebook server with the
14 18 command::
15 19
16 20 $ ipython notebook
17 21
18 22 Note that by default, the notebook doesn't load pylab, it's just a normal
19 23 IPython session like any other. If you want pylab support, you must use::
20 24
21 25 $ ipython notebook --pylab
22 26
23 27 which will behave similar to the terminal and Qt console versions, using your
24 28 default matplotlib backend and providing floating interactive plot windows. If
25 29 you want inline figures, you must manually select the ``inline`` backend::
26 30
27 31 $ ipython notebook --pylab=inline
28 32
29 33 You can start the notebook to communicate via a secure protocol mode using a
30 34 self-signed certificate by typing::
31 35
32 36 $ ipython notebook --certfile=mycert.pem
33 37
34 38 .. note::
35 39
36 40 A self-signed certificate can be generated with openssl. For example:
37 41
38 42 openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem
39 43
40 44 This server uses the same ZeroMQ-based two process kernel architecture as
41 45 the QT Console as well Tornado for serving HTTP/S requests. Some of the main
42 46 features of the Notebook include:
43 47
44 48 * Display rich data (png/html/latex/svg) in the browser as a result of
45 49 computations.
46 50 * Compose text cells using HTML and Markdown.
47 51 * Import and export notebook documents in range of formats (.ipynb, .py).
48 52 * In browser syntax highlighting, tab completion and autoindentation.
49 53 * Inline matplotlib plots that can be stored in Notebook documents and opened
50 54 later.
51 55
52 56 See :ref:`our installation documentation <install_index>` for directions on
53 57 how to install the notebook and its dependencies.
54 58
55 59 .. note::
56 60
57 61 You can start more than one notebook server at the same time, if you want to
58 62 work on notebooks in different directories. By default the first notebook
59 63 server starts in port 8888, later notebooks search for random ports near
60 64 that one. You can also manually specify the port with the ``--port``
61 65 option.
62 66
63 67
64 68 Basic Usage
65 69 ===========
66 70
67 71 The landing page of the notebook server application, which we call the IPython
68 72 Notebook *dashboard*, shows the notebooks currently available in the directory
69 73 in which the application was started, and allows you to create new notebooks.
70 74
71 75 A notebook is a combination of two things:
72 76
73 77 1. An interactive session connected to an IPython kernel, controlled by a web
74 78 application that can send input to the console and display many types of output
75 79 (text, graphics, mathematics and more). This is the same kernel used by the
76 80 :ref:`Qt console <qtconsole>`, but in this case the web console sends input in
77 81 persistent cells that you can edit in-place instead of the vertically scrolling
78 82 terminal style used by the Qt console.
79 83
80 84 2. A document that can save the inputs and outputs of the session as well as
81 85 additional text that accompanies the code but is not meant for execution. In
82 86 this way, notebook files serve as a complete computational record of a session
83 87 including explanatory text and mathematics, code and resulting figures. These
84 88 documents are internally JSON files and are saved with the ``.ipynb``
85 89 extension.
86 90
87 91 If you have ever used the Mathematica or Sage notebooks (the latter is also
88 92 web-based__) you should feel right at home. If you have not, you should be
89 93 able to learn how to use it in just a few minutes.
90 94
91 95 .. __: http://sagenb.org
92 96
93 97
94 98 Creating and editing notebooks
95 99 ------------------------------
96 100
97 101 You can create new notebooks from the dashboard with the ``New Notebook``
98 102 button or open existing ones by clicking on their name. Once in a notebook,
99 103 your browser tab will reflect the name of that notebook (prefixed with "IPy:").
100 104 The URL for that notebook is not meant to be human-readable and is *not*
101 105 persistent across invocations of the notebook server.
102 106
103 107 You can also drag and drop into the area listing files any python file: it
104 108 will be imported into a notebook with the same name (but ``.ipynb`` extension)
105 109 located in the directory where the notebook server was started. This notebook
106 110 will consist of a single cell with all the code in the file, which you can
107 111 later manually partition into individual cells for gradual execution, add text
108 112 and graphics, etc.
109 113
110 114 Workflow and limitations
111 115 ------------------------
112 116
113 117 The normal workflow in a notebook is quite similar to a normal IPython session,
114 118 with the difference that you can edit a cell in-place multiple times until you
115 119 obtain the desired results rather than having to rerun separate scripts with
116 120 the ``%run`` magic (though magics also work in the notebook). Typically
117 121 you'll work on a problem in pieces, organizing related pieces into cells and
118 122 moving forward as previous parts work correctly. This is much more convenient
119 123 for interactive exploration than breaking up a computation into scripts that
120 124 must be executed together, especially if parts of them take a long time to run
121 125 (you can use tricks with namespaces and ``%run -i``, but we think the notebook
122 126 is a more natural solution for that kind of problem).
123 127
124 128 The only significant limitation the notebook currently has, compared to the qt
125 129 console, is that it can not run any code that expects input from the kernel
126 130 (such as scripts that call :func:`raw_input`). Very importantly, this means
127 131 that the ``%debug`` magic does *not* work in the notebook! We intend to
128 132 correct this limitation, but in the meantime, there is a way to debug problems
129 133 in the notebook: you can attach a Qt console to your existing notebook kernel,
130 134 and run ``%debug`` from the Qt console. Simply look for the lines in the
131 135 terminal where you started the kernel that read something like::
132 136
133 137 [IPKernelApp] To connect another client to this kernel, use:
134 138 [IPKernelApp] --existing --shell=53328 --iopub=53817 --stdin=34736 --hb=45543
135 139
136 140 and then start a qt console pointing to that kernel::
137 141
138 142 ipython qtconsole --existing --shell=53328 --iopub=53817 --stdin=34736 --hb=45543
139 143
140 144
141 145 Text input
142 146 ----------
143 147
144 148 In addition to code cells and the output they procude (such as figures), you
145 149 can also type text not meant for execution. To type text, change the type of a
146 150 cell from ``Code`` to ``Markdown`` by using the button or the :kbd:`Ctrl-m m`
147 151 keybinding (see below). You can then type any text in Markdown_ syntax, as
148 152 well as mathematical expressions if you use ``$...$`` for inline math or
149 153 ``$$...$$`` for displayed math.
150 154
151 155 Exporting a notebook
152 156 --------------------
153 157
154 158 If you want to provide others with a static HTML or PDF view of your notebook,
155 159 use the ``Print`` button. This opens a static view of the document, which you
156 160 can print to PDF using your operating system's facilities, or save to a file
157 161 with your web browser's 'Save' option (note that typically, this will create
158 162 both an html file *and* a directory called `notebook_name_files` next to it
159 163 that contains all the necessary style information, so if you intend to share
160 164 this, you must send the directory along with the main html file).
161 165
162 166 The `Download` button lets you save a notebook file to the Download area
163 167 configured by your web browser (particularly useful if you are running the
164 168 notebook server on a remote host and need a file locally). The notebook is
165 169 saved by default with the ``.ipynb`` extension and the files contain JSON data
166 170 that is not meant for human editing or consumption. But you can always export
167 171 the input part of a notebook to a plain python script by choosing Python format
168 172 in the `Download` drop list. This removes all output and saves the text cells
169 173 in comment areas.
170 174
171 175 .. warning::
172 176
173 177 While in simple cases you can roundtrip a notebook to Python, edit the
174 178 python file and import it back without loss, this is in general *not
175 179 guaranteed to work at all*. As the notebook format evolves in complexity,
176 180 there will be attributes of the notebook that will not survive a roundtrip
177 181 through the Python form. You should think of the Python format as a way to
178 182 output a script version of a notebook and the import capabilities as a way
179 183 to load existing code to get a notebook started. But the Python version is
180 184 *not* an alternate notebook format.
181 185
182 186
183 187 Keyboard use
184 188 ------------
185 189
186 190 All actions in the notebook can be achieved with the mouse, but we have also
187 191 added keyboard shortcuts for the most common ones, so that productive use of
188 192 the notebook can be achieved with minimal mouse intervention. The main
189 193 key bindings you need to remember are:
190 194
191 195 * :kbd:`Shift-Enter`: execute the current cell (similar to the Qt console),
192 196 show output (if any) and create a new cell below. Note that in the notebook,
193 197 simply using :kbd:`Enter` *never* forces execution, it simply inserts a new
194 198 line in the current cell. Therefore, in the notebook you must always use
195 199 :kbd:`Shift-Enter` to get execution (or use the mouse and click on the ``Run
196 200 Selected`` button).
197 201
198 202 * :kbd:`Ctrl-Enter`: execute the current cell in "terminal mode", where any
199 203 output is shown but the cursor cursor stays in the current cell, whose input
200 204 area is flushed empty. This is convenient to do quick in-place experiments
201 205 or query things like filesystem content without creating additional cells you
202 206 may not want saved in your notebook.
203 207
204 208 * :kbd:`Ctrl-m`: this is the prefix for all other keybindings, which consist
205 209 of an additional single letter. Type :kbd:`Ctrl-m h` (that is, the sole
206 210 letter :kbd:`h` after :kbd:`Ctrl-m`) and IPython will show you the remaining
207 211 available keybindings.
208 212
209 213
210 214 Notebook document format
211 215 ========================
212 216
213 217
General Comments 0
You need to be logged in to leave comments. Login now