##// END OF EJS Templates
Add notes in the what's new and config sections.
Bradley M. Froehle -
Show More
@@ -1,531 +1,533 b''
1 1 .. _config_overview:
2 2
3 3 ============================================
4 4 Overview of the IPython configuration system
5 5 ============================================
6 6
7 7 This section describes the IPython configuration system. Starting with version
8 8 0.11, IPython has a completely new configuration system that is quite
9 9 different from the older :file:`ipythonrc` or :file:`ipy_user_conf.py`
10 10 approaches. The new configuration system was designed from scratch to address
11 11 the particular configuration needs of IPython. While there are many
12 12 other excellent configuration systems out there, we found that none of them
13 13 met our requirements.
14 14
15 15 .. warning::
16 16
17 17 If you are upgrading to version 0.11 of IPython, you will need to migrate
18 18 your old :file:`ipythonrc` or :file:`ipy_user_conf.py` configuration files
19 19 to the new system. You may want to read the section on
20 20 :ref:`configuring IPython <configuring_ipython>`. There are also some ideas
21 21 `on the IPython wiki <http://wiki.ipython.org/Cookbook/Moving_config_to_IPython_0.11>`_
22 22 about this.
23 23
24 24 The discussion that follows is focused on teaching users how to configure
25 25 IPython to their liking. Developers who want to know more about how they
26 26 can enable their objects to take advantage of the configuration system
27 27 should consult our :ref:`developer guide <developer_guide>`
28 28
29 29 The main concepts
30 30 =================
31 31
32 32 There are a number of abstractions that the IPython configuration system uses.
33 33 Each of these abstractions is represented by a Python class.
34 34
35 35 Configuration object: :class:`~IPython.config.loader.Config`
36 36 A configuration object is a simple dictionary-like class that holds
37 37 configuration attributes and sub-configuration objects. These classes
38 38 support dotted attribute style access (``Foo.bar``) in addition to the
39 39 regular dictionary style access (``Foo['bar']``). Configuration objects
40 40 are smart. They know how to merge themselves with other configuration
41 41 objects and they automatically create sub-configuration objects.
42 42
43 43 Application: :class:`~IPython.config.application.Application`
44 44 An application is a process that does a specific job. The most obvious
45 45 application is the :command:`ipython` command line program. Each
46 46 application reads *one or more* configuration files and a single set of
47 47 command line options
48 48 and then produces a master configuration object for the application. This
49 49 configuration object is then passed to the configurable objects that the
50 50 application creates. These configurable objects implement the actual logic
51 51 of the application and know how to configure themselves given the
52 52 configuration object.
53 53
54 54 Applications always have a `log` attribute that is a configured Logger.
55 55 This allows centralized logging configuration per-application.
56 56
57 57 Configurable: :class:`~IPython.config.configurable.Configurable`
58 58 A configurable is a regular Python class that serves as a base class for
59 59 all main classes in an application. The
60 60 :class:`~IPython.config.configurable.Configurable` base class is
61 61 lightweight and only does one things.
62 62
63 63 This :class:`~IPython.config.configurable.Configurable` is a subclass
64 64 of :class:`~IPython.utils.traitlets.HasTraits` that knows how to configure
65 65 itself. Class level traits with the metadata ``config=True`` become
66 66 values that can be configured from the command line and configuration
67 67 files.
68 68
69 69 Developers create :class:`~IPython.config.configurable.Configurable`
70 70 subclasses that implement all of the logic in the application. Each of
71 71 these subclasses has its own configuration information that controls how
72 72 instances are created.
73 73
74 74 Singletons: :class:`~IPython.config.configurable.SingletonConfigurable`
75 75 Any object for which there is a single canonical instance. These are
76 76 just like Configurables, except they have a class method
77 77 :meth:`~IPython.config.configurable.SingletonConfigurable.instance`,
78 78 that returns the current active instance (or creates one if it
79 79 does not exist). Examples of singletons include
80 80 :class:`~IPython.config.application.Application`s and
81 81 :class:`~IPython.core.interactiveshell.InteractiveShell`. This lets
82 82 objects easily connect to the current running Application without passing
83 83 objects around everywhere. For instance, to get the current running
84 84 Application instance, simply do: ``app = Application.instance()``.
85 85
86 86
87 87 .. note::
88 88
89 89 Singletons are not strictly enforced - you can have many instances
90 90 of a given singleton class, but the :meth:`instance` method will always
91 91 return the same one.
92 92
93 93 Having described these main concepts, we can now state the main idea in our
94 94 configuration system: *"configuration" allows the default values of class
95 95 attributes to be controlled on a class by class basis*. Thus all instances of
96 96 a given class are configured in the same way. Furthermore, if two instances
97 97 need to be configured differently, they need to be instances of two different
98 98 classes. While this model may seem a bit restrictive, we have found that it
99 99 expresses most things that need to be configured extremely well. However, it
100 100 is possible to create two instances of the same class that have different
101 101 trait values. This is done by overriding the configuration.
102 102
103 103 Now, we show what our configuration objects and files look like.
104 104
105 105 Configuration objects and files
106 106 ===============================
107 107
108 108 A configuration file is simply a pure Python file that sets the attributes
109 109 of a global, pre-created configuration object. This configuration object is a
110 110 :class:`~IPython.config.loader.Config` instance. While in a configuration
111 111 file, to get a reference to this object, simply call the :func:`get_config`
112 112 function. We inject this function into the global namespace that the
113 113 configuration file is executed in.
114 114
115 115 Here is an example of a super simple configuration file that does nothing::
116 116
117 117 c = get_config()
118 118
119 119 Once you get a reference to the configuration object, you simply set
120 120 attributes on it. All you have to know is:
121 121
122 122 * The name of each attribute.
123 123 * The type of each attribute.
124 124
125 125 The answers to these two questions are provided by the various
126 126 :class:`~IPython.config.configurable.Configurable` subclasses that an
127 127 application uses. Let's look at how this would work for a simple configurable
128 128 subclass::
129 129
130 130 # Sample configurable:
131 131 from IPython.config.configurable import Configurable
132 132 from IPython.utils.traitlets import Int, Float, Unicode, Bool
133 133
134 134 class MyClass(Configurable):
135 135 name = Unicode(u'defaultname', config=True)
136 136 ranking = Int(0, config=True)
137 137 value = Float(99.0)
138 138 # The rest of the class implementation would go here..
139 139
140 140 In this example, we see that :class:`MyClass` has three attributes, two
141 141 of whom (``name``, ``ranking``) can be configured. All of the attributes
142 142 are given types and default values. If a :class:`MyClass` is instantiated,
143 143 but not configured, these default values will be used. But let's see how
144 144 to configure this class in a configuration file::
145 145
146 146 # Sample config file
147 147 c = get_config()
148 148
149 149 c.MyClass.name = 'coolname'
150 150 c.MyClass.ranking = 10
151 151
152 152 After this configuration file is loaded, the values set in it will override
153 153 the class defaults anytime a :class:`MyClass` is created. Furthermore,
154 154 these attributes will be type checked and validated anytime they are set.
155 155 This type checking is handled by the :mod:`IPython.utils.traitlets` module,
156 156 which provides the :class:`Unicode`, :class:`Int` and :class:`Float` types.
157 157 In addition to these traitlets, the :mod:`IPython.utils.traitlets` provides
158 158 traitlets for a number of other types.
159 159
160 160 .. note::
161 161
162 162 Underneath the hood, the :class:`Configurable` base class is a subclass of
163 163 :class:`IPython.utils.traitlets.HasTraits`. The
164 164 :mod:`IPython.utils.traitlets` module is a lightweight version of
165 165 :mod:`enthought.traits`. Our implementation is a pure Python subset
166 166 (mostly API compatible) of :mod:`enthought.traits` that does not have any
167 167 of the automatic GUI generation capabilities. Our plan is to achieve 100%
168 168 API compatibility to enable the actual :mod:`enthought.traits` to
169 169 eventually be used instead. Currently, we cannot use
170 170 :mod:`enthought.traits` as we are committed to the core of IPython being
171 171 pure Python.
172 172
173 173 It should be very clear at this point what the naming convention is for
174 174 configuration attributes::
175 175
176 176 c.ClassName.attribute_name = attribute_value
177 177
178 178 Here, ``ClassName`` is the name of the class whose configuration attribute you
179 179 want to set, ``attribute_name`` is the name of the attribute you want to set
180 180 and ``attribute_value`` the the value you want it to have. The ``ClassName``
181 181 attribute of ``c`` is not the actual class, but instead is another
182 182 :class:`~IPython.config.loader.Config` instance.
183 183
184 184 .. note::
185 185
186 186 The careful reader may wonder how the ``ClassName`` (``MyClass`` in
187 187 the above example) attribute of the configuration object ``c`` gets
188 188 created. These attributes are created on the fly by the
189 189 :class:`~IPython.config.loader.Config` instance, using a simple naming
190 190 convention. Any attribute of a :class:`~IPython.config.loader.Config`
191 191 instance whose name begins with an uppercase character is assumed to be a
192 192 sub-configuration and a new empty :class:`~IPython.config.loader.Config`
193 193 instance is dynamically created for that attribute. This allows deeply
194 194 hierarchical information created easily (``c.Foo.Bar.value``) on the fly.
195 195
196 196 Configuration files inheritance
197 197 ===============================
198 198
199 199 Let's say you want to have different configuration files for various purposes.
200 200 Our configuration system makes it easy for one configuration file to inherit
201 201 the information in another configuration file. The :func:`load_subconfig`
202 202 command can be used in a configuration file for this purpose. Here is a simple
203 203 example that loads all of the values from the file :file:`base_config.py`::
204 204
205 205 # base_config.py
206 206 c = get_config()
207 207 c.MyClass.name = 'coolname'
208 208 c.MyClass.ranking = 100
209 209
210 210 into the configuration file :file:`main_config.py`::
211 211
212 212 # main_config.py
213 213 c = get_config()
214 214
215 215 # Load everything from base_config.py
216 216 load_subconfig('base_config.py')
217 217
218 218 # Now override one of the values
219 219 c.MyClass.name = 'bettername'
220 220
221 221 In a situation like this the :func:`load_subconfig` makes sure that the
222 222 search path for sub-configuration files is inherited from that of the parent.
223 223 Thus, you can typically put the two in the same directory and everything will
224 224 just work.
225 225
226 226 You can also load configuration files by profile, for instance:
227 227
228 228 .. sourcecode:: python
229 229
230 230 load_subconfig('ipython_config.py', profile='default')
231 231
232 232 to inherit your default configuration as a starting point.
233 233
234 234
235 235 Class based configuration inheritance
236 236 =====================================
237 237
238 238 There is another aspect of configuration where inheritance comes into play.
239 239 Sometimes, your classes will have an inheritance hierarchy that you want
240 240 to be reflected in the configuration system. Here is a simple example::
241 241
242 242 from IPython.config.configurable import Configurable
243 243 from IPython.utils.traitlets import Int, Float, Unicode, Bool
244 244
245 245 class Foo(Configurable):
246 246 name = Unicode(u'fooname', config=True)
247 247 value = Float(100.0, config=True)
248 248
249 249 class Bar(Foo):
250 250 name = Unicode(u'barname', config=True)
251 251 othervalue = Int(0, config=True)
252 252
253 253 Now, we can create a configuration file to configure instances of :class:`Foo`
254 254 and :class:`Bar`::
255 255
256 256 # config file
257 257 c = get_config()
258 258
259 259 c.Foo.name = u'bestname'
260 260 c.Bar.othervalue = 10
261 261
262 262 This class hierarchy and configuration file accomplishes the following:
263 263
264 264 * The default value for :attr:`Foo.name` and :attr:`Bar.name` will be
265 265 'bestname'. Because :class:`Bar` is a :class:`Foo` subclass it also
266 266 picks up the configuration information for :class:`Foo`.
267 267 * The default value for :attr:`Foo.value` and :attr:`Bar.value` will be
268 268 ``100.0``, which is the value specified as the class default.
269 269 * The default value for :attr:`Bar.othervalue` will be 10 as set in the
270 270 configuration file. Because :class:`Foo` is the parent of :class:`Bar`
271 271 it doesn't know anything about the :attr:`othervalue` attribute.
272 272
273 273
274 274 .. _ipython_dir:
275 275
276 276 Configuration file location
277 277 ===========================
278 278
279 279 So where should you put your configuration files? IPython uses "profiles" for
280 280 configuration, and by default, all profiles will be stored in the so called
281 281 "IPython directory". The location of this directory is determined by the
282 282 following algorithm:
283 283
284 284 * If the ``ipython_dir`` command line flag is given, its value is used.
285 285
286 286 * If not, the value returned by :func:`IPython.utils.path.get_ipython_dir`
287 287 is used. This function will first look at the :envvar:`IPYTHONDIR`
288 288 environment variable and then default to a platform-specific default.
289 Historical support for the :envvar:`IPYTHON_DIR` environment variable will
290 be removed in a future release.
289 291
290 292 On posix systems (Linux, Unix, etc.), IPython respects the ``$XDG_CONFIG_HOME``
291 293 part of the `XDG Base Directory`_ specification. If ``$XDG_CONFIG_HOME`` is
292 294 defined and exists ( ``XDG_CONFIG_HOME`` has a default interpretation of
293 295 :file:`$HOME/.config`), then IPython's config directory will be located in
294 296 :file:`$XDG_CONFIG_HOME/ipython`. If users still have an IPython directory
295 297 in :file:`$HOME/.ipython`, then that will be used. in preference to the
296 298 system default.
297 299
298 300 For most users, the default value will simply be something like
299 301 :file:`$HOME/.config/ipython` on Linux, or :file:`$HOME/.ipython`
300 302 elsewhere.
301 303
302 304 Once the location of the IPython directory has been determined, you need to know
303 305 which profile you are using. For users with a single configuration, this will
304 306 simply be 'default', and will be located in
305 307 :file:`<IPYTHONDIR>/profile_default`.
306 308
307 309 The next thing you need to know is what to call your configuration file. The
308 310 basic idea is that each application has its own default configuration filename.
309 311 The default named used by the :command:`ipython` command line program is
310 312 :file:`ipython_config.py`, and *all* IPython applications will use this file.
311 313 Other applications, such as the parallel :command:`ipcluster` scripts or the
312 314 QtConsole will load their own config files *after* :file:`ipython_config.py`. To
313 315 load a particular configuration file instead of the default, the name can be
314 316 overridden by the ``config_file`` command line flag.
315 317
316 318 To generate the default configuration files, do::
317 319
318 320 $> ipython profile create
319 321
320 322 and you will have a default :file:`ipython_config.py` in your IPython directory
321 323 under :file:`profile_default`. If you want the default config files for the
322 324 :mod:`IPython.parallel` applications, add ``--parallel`` to the end of the
323 325 command-line args.
324 326
325 327 .. _Profiles:
326 328
327 329 Profiles
328 330 ========
329 331
330 332 A profile is a directory containing configuration and runtime files, such as
331 333 logs, connection info for the parallel apps, and your IPython command history.
332 334
333 335 The idea is that users often want to maintain a set of configuration files for
334 336 different purposes: one for doing numerical computing with NumPy and SciPy and
335 337 another for doing symbolic computing with SymPy. Profiles make it easy to keep a
336 338 separate configuration files, logs, and histories for each of these purposes.
337 339
338 340 Let's start by showing how a profile is used:
339 341
340 342 .. code-block:: bash
341 343
342 344 $ ipython --profile=sympy
343 345
344 346 This tells the :command:`ipython` command line program to get its configuration
345 347 from the "sympy" profile. The file names for various profiles do not change. The
346 348 only difference is that profiles are named in a special way. In the case above,
347 349 the "sympy" profile means looking for :file:`ipython_config.py` in :file:`<IPYTHONDIR>/profile_sympy`.
348 350
349 351 The general pattern is this: simply create a new profile with:
350 352
351 353 .. code-block:: bash
352 354
353 355 ipython profile create <name>
354 356
355 357 which adds a directory called ``profile_<name>`` to your IPython directory. Then
356 358 you can load this profile by adding ``--profile=<name>`` to your command line
357 359 options. Profiles are supported by all IPython applications.
358 360
359 361 IPython ships with some sample profiles in :file:`IPython/config/profile`. If
360 362 you create profiles with the name of one of our shipped profiles, these config
361 363 files will be copied over instead of starting with the automatically generated
362 364 config files.
363 365
364 366 Security Files
365 367 --------------
366 368
367 369 If you are using the notebook, qtconsole, or parallel code, IPython stores
368 370 connection information in small JSON files in the active profile's security
369 371 directory. This directory is made private, so only you can see the files inside. If
370 372 you need to move connection files around to other computers, this is where they will
371 373 be. If you want your code to be able to open security files by name, we have a
372 374 convenience function :func:`IPython.utils.path.get_security_file`, which will return
373 375 the absolute path to a security file from its filename and [optionally] profile
374 376 name.
375 377
376 378 Startup Files
377 379 -------------
378 380
379 381 If you want some code to be run at the beginning of every IPython session with a
380 382 particular profile, the easiest way is to add Python (.py) or IPython (.ipy) scripts
381 383 to your :file:`<profile>/startup` directory. Files in this directory will always be
382 384 executed as soon as the IPython shell is constructed, and before any other code or
383 385 scripts you have specified. If you have multiple files in the startup directory,
384 386 they will be run in lexicographical order, so you can control the ordering by adding
385 387 a '00-' prefix.
386 388
387 389 .. note::
388 390
389 391 Automatic startup files are new in IPython 0.12. Use the
390 392 InteractiveShellApp.exec_files configurable for similar behavior in 0.11.
391 393
392 394
393 395 .. _commandline:
394 396
395 397 Command-line arguments
396 398 ======================
397 399
398 400 IPython exposes *all* configurable options on the command-line. The command-line
399 401 arguments are generated from the Configurable traits of the classes associated
400 402 with a given Application. Configuring IPython from the command-line may look
401 403 very similar to an IPython config file
402 404
403 405 IPython applications use a parser called
404 406 :class:`~IPython.config.loader.KeyValueLoader` to load values into a Config
405 407 object. Values are assigned in much the same way as in a config file:
406 408
407 409 .. code-block:: bash
408 410
409 411 $> ipython --InteractiveShell.use_readline=False --BaseIPythonApplication.profile='myprofile'
410 412
411 413 Is the same as adding:
412 414
413 415 .. sourcecode:: python
414 416
415 417 c.InteractiveShell.use_readline=False
416 418 c.BaseIPythonApplication.profile='myprofile'
417 419
418 420 to your config file. Key/Value arguments *always* take a value, separated by '='
419 421 and no spaces.
420 422
421 423 Common Arguments
422 424 ****************
423 425
424 426 Since the strictness and verbosity of the KVLoader above are not ideal for everyday
425 427 use, common arguments can be specified as flags_ or aliases_.
426 428
427 429 Flags and Aliases are handled by :mod:`argparse` instead, allowing for more flexible
428 430 parsing. In general, flags and aliases are prefixed by ``--``, except for those
429 431 that are single characters, in which case they can be specified with a single ``-``, e.g.:
430 432
431 433 .. code-block:: bash
432 434
433 435 $> ipython -i -c "import numpy; x=numpy.linspace(0,1)" --profile testing --colors=lightbg
434 436
435 437 Aliases
436 438 -------
437 439
438 440 For convenience, applications have a mapping of commonly used traits, so you don't have
439 441 to specify the whole class name:
440 442
441 443 .. code-block:: bash
442 444
443 445 $> ipython --profile myprofile
444 446 # and
445 447 $> ipython --profile='myprofile'
446 448 # are equivalent to
447 449 $> ipython --BaseIPythonApplication.profile='myprofile'
448 450
449 451 Flags
450 452 -----
451 453
452 454 Applications can also be passed **flags**. Flags are options that take no
453 455 arguments. They are simply wrappers for
454 456 setting one or more configurables with predefined values, often True/False.
455 457
456 458 For instance:
457 459
458 460 .. code-block:: bash
459 461
460 462 $> ipcontroller --debug
461 463 # is equivalent to
462 464 $> ipcontroller --Application.log_level=DEBUG
463 465 # and
464 466 $> ipython --pylab
465 467 # is equivalent to
466 468 $> ipython --pylab=auto
467 469 # or
468 470 $> ipython --no-banner
469 471 # is equivalent to
470 472 $> ipython --TerminalIPythonApp.display_banner=False
471 473
472 474 Subcommands
473 475 ***********
474 476
475 477
476 478 Some IPython applications have **subcommands**. Subcommands are modeled after
477 479 :command:`git`, and are called with the form :command:`command subcommand
478 480 [...args]`. Currently, the QtConsole is a subcommand of terminal IPython:
479 481
480 482 .. code-block:: bash
481 483
482 484 $> ipython qtconsole --profile=myprofile
483 485
484 486 and :command:`ipcluster` is simply a wrapper for its various subcommands (start,
485 487 stop, engines).
486 488
487 489 .. code-block:: bash
488 490
489 491 $> ipcluster start --profile=myprofile --n=4
490 492
491 493
492 494 To see a list of the available aliases, flags, and subcommands for an IPython application, simply pass ``-h`` or ``--help``. And to see the full list of configurable options (*very* long), pass ``--help-all``.
493 495
494 496
495 497 Design requirements
496 498 ===================
497 499
498 500 Here are the main requirements we wanted our configuration system to have:
499 501
500 502 * Support for hierarchical configuration information.
501 503
502 504 * Full integration with command line option parsers. Often, you want to read
503 505 a configuration file, but then override some of the values with command line
504 506 options. Our configuration system automates this process and allows each
505 507 command line option to be linked to a particular attribute in the
506 508 configuration hierarchy that it will override.
507 509
508 510 * Configuration files that are themselves valid Python code. This accomplishes
509 511 many things. First, it becomes possible to put logic in your configuration
510 512 files that sets attributes based on your operating system, network setup,
511 513 Python version, etc. Second, Python has a super simple syntax for accessing
512 514 hierarchical data structures, namely regular attribute access
513 515 (``Foo.Bar.Bam.name``). Third, using Python makes it easy for users to
514 516 import configuration attributes from one configuration file to another.
515 517 Fourth, even though Python is dynamically typed, it does have types that can
516 518 be checked at runtime. Thus, a ``1`` in a config file is the integer '1',
517 519 while a ``'1'`` is a string.
518 520
519 521 * A fully automated method for getting the configuration information to the
520 522 classes that need it at runtime. Writing code that walks a configuration
521 523 hierarchy to extract a particular attribute is painful. When you have
522 524 complex configuration information with hundreds of attributes, this makes
523 525 you want to cry.
524 526
525 527 * Type checking and validation that doesn't require the entire configuration
526 528 hierarchy to be specified statically before runtime. Python is a very
527 529 dynamic language and you don't always know everything that needs to be
528 530 configured when a program starts.
529 531
530 532
531 533 .. _`XDG Base Directory`: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
@@ -1,18 +1,21 b''
1 1 =====================
2 2 Development version
3 3 =====================
4 4
5 5 This document describes in-flight development work.
6 6
7 7 Redesigned IPython notebook user interface
8 8 ------------------------------------------
9 9
10 10 .. add details
11 11
12 12 Other new features
13 13 ------------------
14 14
15 15 * **%install_ext**: A new magic function to install an IPython extension from
16 16 a URL. E.g. ``%install_ext https://bitbucket.org/birkenfeld/ipython-physics/raw/d1310a2ab15d/physics.py``.
17 17
18 * The :envvar:`IPYTHON_DIR` environment variable has been deprecated and
19 support for it will be removed in a future release. Please use the
20 :envvar:`IPYTHONDIR` environment variable instead.
18 21
General Comments 0
You need to be logged in to leave comments. Login now