##// END OF EJS Templates
a few fixes...
Matthias BUSSONNIER -
Show More
@@ -1,266 +1,268 b''
1 1 """Utility function for installing MathJax javascript library into
2 2 the notebook's 'static' directory, for offline use.
3 3
4 Authors:
5
6 * Min RK
7 * Mark Sienkiewicz
8 * Matthias Bussonnier
9
4 10 To download and install MathJax:
5 11
6 12 From Python:
7 13
8 14 >>> from IPython.external.mathjax import install_mathjax
9 15 >>> install_mathjax()
10 16
11 17 From the command line:
12 18
13 19 $ python -m IPython.external.mathjax
14 20
15 21 To install MathJax from a file you have already downloaded:
16 22
17 23 $ python -m IPython.external.mathjax mathjax-xxx.tar.gz
18 24 $ python -m IPython.external.mathjax mathjax-xxx.zip
19 25
20 26 It will not install MathJax if it is already there. Use -r to
21 27 replace the existing copy of MathJax.
22 28
23 29 To find the directory where IPython would like MathJax installed:
24 30
25 31 $ python -m IPython.external.mathjax -d
26 32
27 33 """
28 34
29 35 #-----------------------------------------------------------------------------
30 36 # Copyright (C) 2008-2011 The IPython Development Team
31 37 #
32 38 # Distributed under the terms of the BSD License. The full license is in
33 39 # the file COPYING, distributed as part of this software.
34 40 #-----------------------------------------------------------------------------
35 41
36 # Authors:
37 #
38 # * Min RK
39 # * Mark Sienkiewicz at Space Telescope Science Institute (command line invocation)
40 #
41 42
42 43 #-----------------------------------------------------------------------------
43 44 # Imports
44 45 #-----------------------------------------------------------------------------
45 46
46 47 import os
47 48 import shutil
48 49 import sys
49 50 import tarfile
50 51 import urllib2
51 52 import zipfile
52 53
53 from IPython.frontend.html import notebook as nbmod
54
55 54 #-----------------------------------------------------------------------------
56 55 #
57 56 #-----------------------------------------------------------------------------
58 57
59 58 # Where mathjax will be installed.
60 59
61 static = os.path.join(os.path.dirname(os.path.abspath(nbmod.__file__)), 'static')
62 dest = os.path.join(static, 'mathjax')
60 dest = os.path.join(locate_profile('default'), 'static')
63 61
64 62 ##
65 63
66 64 # Test for access to install mathjax.
67 65
68 66 def check_perms(replace=False):
69 67 if not os.access(static, os.W_OK):
70 raise IOError("Need have write access to %s"%static)
68 raise IOError("Need have write access to %s" % static)
71 69 if os.path.exists(dest):
72 70 if replace:
73 71 if not os.access(dest, os.W_OK):
74 raise IOError("Need have write access to %s"%dest)
72 raise IOError("Need have write access to %s" % dest)
75 73 print "removing previous MathJax install"
76 74 shutil.rmtree(dest)
77 75 return True
78 76 else:
79 77 print "offline MathJax apparently already installed"
80 78 return False
81 79 else :
82 80 return True
83 81
84 82 ##
85 83
86 84 def extract_tar( fd, dest ) :
87 85 # use 'r|gz' stream mode, because socket file-like objects can't seek:
88 86 tar = tarfile.open(fileobj=fd, mode='r|gz')
89 87
90 88 # we just happen to know that the first entry in the mathjax
91 89 # archive is the directory that the remaining members are in.
92 90 topdir = tar.firstmember.path
93 91
94 92 # extract the archive (contains a single directory) to the static/ directory
95 93 tar.extractall(static)
96 94
97 95 # it will be mathjax-MathJax-<sha>, rename to just mathjax
98 96 os.rename(os.path.join(static, topdir), dest)
99 97
100 98 ##
101 99
102 100 def extract_zip( fd, dest ) :
103 101 z = zipfile.ZipFile( fd, 'r' )
104 102
105 103 # we just happen to know that the first entry in the mathjax
106 104 # archive is the directory that the remaining members are in.
107 105 topdir = z.namelist()[0]
108 106
109 107 # extract the archive (contains a single directory) to the static/ directory
110 108 z.extractall( static )
111 109
112 110 # it will be mathjax-MathJax-<sha>, rename to just mathjax
113 111 d = os.path.join(static, topdir)
114 112 print d
115 113 os.rename(os.path.join(static, topdir), dest)
116 114
117 115 ##
118 116
119 def install_mathjax(tag='v1.1', replace=False, fd=None, extractor=extract_tar ):
120 """Download and install MathJax for offline use.
117 def install_mathjax(tag='v2.0', replace=False, file=None, extractor=extract_tar ):
118 """Download and/or install MathJax for offline use.
121 119
122 120 This will install mathjax to the 'static' dir in the IPython notebook
123 121 package, so it will fail if the caller does not have write access
124 122 to that location.
125 123
126 124 MathJax is a ~15MB download, and ~150MB installed.
127 125
128 126 Parameters
129 127 ----------
130 128
131 129 replace : bool [False]
132 130 Whether to remove and replace an existing install.
133 tag : str ['v1.1']
131 tag : str ['v2.0']
134 132 Which tag to download. Default is 'v1.1', the current stable release,
135 133 but alternatives include 'v1.1a' and 'master'.
134 file : file like object [ defualt to content of https://github.com/mathjax/MathJax/tarball/#{tag}]
135 File handle from which to untar/unzip/... mathjax
136 extractor : function
137 Method tu use to untar/unzip/... `file`
136 138 """
137 139
138 140 if not check_perms(replace) :
139 141 return
140 142
141 if fd is None :
143 if file is None :
142 144 # download mathjax
143 145 mathjax_url = "https://github.com/mathjax/MathJax/tarball/%s"%tag
144 146 print "Downloading mathjax source from %s"%mathjax_url
145 147 response = urllib2.urlopen(mathjax_url)
146 fd = response.fp
148 file = response.fp
147 149
148 150 print "Extracting to %s"%dest
149 151 extractor( fd, dest )
150 152
151 153 ##
152 154
153 155 def test_func( remove ) :
154 156 """See if mathjax appears to be installed correctly"""
155 157 if not os.path.isdir( dest ) :
156 158 print "%s directory not found"%dest
157 159 status=1
158 160 if not os.path.exists( dest + "/MathJax.js" ) :
159 161 print "MathJax.js not present in %s"%dest
160 162 status=1
161 163 print "ok"
162 164 if remove :
163 165 shutil.rmtree( dest )
164 return 0
166 return status
165 167
166 168 ##
167 169
168 170 def main( args ) :
169 171 # This main is just simple enough that it is not worth the
170 172 # complexity of argparse
171 173
172 174 # What directory is mathjax in?
173 175 if '-d' in args :
174 176 print dest
175 177 return
176 178
177 179 # help
178 180 if '-h' in args or '--help' in args :
179 181 print __doc__
180 182 return
181 183
182 184 # remove/replace existing mathjax?
183 185 if '-r' in args :
184 186 replace = True
185 187 args.remove('-r')
186 188 else :
187 189 replace = False
188 190
189 191 # undocumented test interface
190 192 if '-test' in args :
191 193 return test_func( replace )
192 194
193 # do it
195 # do it
194 196 if len(args) == 0 :
195 197 # This is compatible with the interface documented in ipython 0.13
196 198 install_mathjax( replace=replace )
197 199 else :
198 200 fname = args[0]
199 201
200 202 # automatically detect zip/tar - could do something based
201 203 # on file content, but really not cost-effective here.
202 204 if fname.endswith('.zip') :
203 205 extractor = extract_zip
204 206 else :
205 207 extractor = extract_tar
206 208
207 209 # do it
208 210 install_mathjax(fd=open(args[0],"r"), replace=replace, extractor=extractor )
209 211
210 212 if __name__ == '__main__' :
211 213 sys.exit(main( sys.argv[1:] ))
212 214
213 215 __all__ = ['install_mathjax','main','dest']
214 216
215 217 """
216 218 Test notes:
217 219
218 220 IPython uses IPython.testing.iptest as a custom test controller
219 221 (though it is based on nose). It might be possible to fit automatic
220 222 tests of installation into that framework, but it looks awkward to me.
221 223 So, here is a manual procedure for testing this automatic installer.
222 224
223 225 Mark Sienkiewicz, 2012-08-06
224 226 first 8 letters of my last name @ stsci.edu
225 227
226 228 # remove mathjax from the installed ipython instance
227 229 # IOError ok if mathjax was never installed yet.
228 230
229 231 python -m IPython.external.mathjax -test -r
230 232
231 233 # download and install mathjax from command line:
232 234
233 python -m IPython.external.mathjax
235 python -m IPython.external.mathjax
234 236 python -m IPython.external.mathjax -test -r
235 237
236 238 # download and install from within python
237 239
238 240 python -c "from IPython.external.mathjax import install_mathjax; install_mathjax()"
239 241 python -m IPython.external.mathjax -test -r
240 242
241 243 # view http://www.mathjax.org/download/ in your browser
242 244 # save-as the link for MathJax-1.1 near the bottom of the page.
243 245 # The file it offers is mathjax-MathJax-v1.1-0-g5a7e4d7.zip
244 246
245 247 python -m IPython.external.mathjax mathjax-MathJax-v1.1-0-g5a7e4d7.zip
246 248 python -m IPython.external.mathjax -test -r
247 249
248 250 # download https://github.com/mathjax/MathJax/tarball/v1.1 in your browser
249 251 # (this is the url used internally by install_mathjax)
250 252 # The file it offers is mathjax-MathJax-v1.1-0-g5a7e4d7.tar.gz
251 253
252 python -m IPython.external.mathjax mathjax-MathJax-v1.1-0-g5a7e4d7.tar.gz
254 python -m IPython.external.mathjax mathjax-MathJax-v1.1-0-g5a7e4d7.tar.gz
253 255
254 256 python -m IPython.external.mathjax -test
255 # note no -r
257 # note no -r
256 258
257 259 # install it again while it is already there
258 260
259 python -m IPython.external.mathjax mathjax-MathJax-v1.1-0-g5a7e4d7.tar.gz
261 python -m IPython.external.mathjax mathjax-MathJax-v1.1-0-g5a7e4d7.tar.gz
260 262 # says "offline MathJax apparently already installed"
261 263
262 264 python -m IPython.external.mathjax ~/mathjax-MathJax-v1.1-0-g5a7e4d7.tar.gz
263 265 python -m IPython.external.mathjax -test
264 266
265 267
266 268 """
@@ -1,387 +1,388 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 Please let us know if you have problems installing IPython or any of its
11 11 dependencies. Officially, IPython requires Python 2.6, 2.7, 3.1, or 3.2.
12 12
13 13 .. warning::
14 14
15 15 Since version 0.11, IPython has a hard syntax dependency on 2.6, and will no
16 16 longer work on Python <= 2.5. You can find older versions of IPython which
17 17 supported Python <= 2.5 `here <http://archive.ipython.org/release/>`_
18 18
19 19 Some of the installation approaches use the :mod:`distribute` package and its
20 20 :command:`easy_install` command line program. In many scenarios, this provides
21 21 the most simple method of installing IPython and its dependencies. More
22 22 information about :mod:`distribute` can be found on `its PyPI page
23 23 <http://pypi.python.org/pypi/distribute>`__.
24 24
25 25 .. note::
26 26
27 27 On Windows, IPython has a hard dependency on :mod:`distribute`. We hope to
28 28 change this in the future, but for now on Windows, you *must* install
29 29 :mod:`distribute`.
30 30
31 31 More general information about installing Python packages can be found in
32 32 `Python's documentation <http://docs.python.org>`_.
33 33
34 34
35 35 Quickstart
36 36 ==========
37 37
38 38 If you have :mod:`distribute` installed and you are on OS X or Linux (not
39 39 Windows), the following will download and install IPython *and* the main
40 40 optional dependencies:
41 41
42 42 .. code-block:: bash
43 43
44 44 $ easy_install ipython[zmq,qtconsole,notebook,test]
45 45
46 46 This will get:
47 47
48 48 - pyzmq, needed for IPython's parallel computing features, qt console and
49 49 notebook.
50 50 - pygments, used by the Qt console for syntax highlighting.
51 51 - tornado, needed by the web-based notebook
52 52 - nose, used by the test suite.
53 53
54 54 To run IPython's test suite, use the :command:`iptest` command:
55 55
56 56 .. code-block:: bash
57 57
58 58 $ iptest
59 59
60 60
61 61 Installing IPython itself
62 62 =========================
63 63
64 64 Given a properly built Python, the basic interactive IPython shell will work
65 65 with no external dependencies. However, some Python distributions
66 66 (particularly on Windows and OS X), don't come with a working :mod:`readline`
67 67 module. The IPython shell will work without :mod:`readline`, but will lack
68 68 many features that users depend on, such as tab completion and command line
69 69 editing. If you install IPython with :mod:`distribute`, (e.g. with
70 70 `easy_install`), then the appropriate :mod:`readline` for your platform will be
71 71 installed. See below for details of how to make sure you have a working
72 72 :mod:`readline`.
73 73
74 74 Installation using easy_install
75 75 -------------------------------
76 76
77 77 If you have :mod:`distribute` installed, the easiest way of getting IPython is
78 78 to simply use :command:`easy_install`:
79 79
80 80 .. code-block:: bash
81 81
82 82 $ easy_install ipython
83 83
84 84 That's it.
85 85
86 86 Installation from source
87 87 ------------------------
88 88
89 89 If you don't want to use :command:`easy_install`, or don't have it installed,
90 90 just grab the latest stable build of IPython from `here
91 91 <http://ipython.org/download.html>`_. Then do the following:
92 92
93 93 .. code-block:: bash
94 94
95 95 $ tar -xzf ipython.tar.gz
96 96 $ cd ipython
97 97 $ python setup.py install
98 98
99 99 If you are installing to a location (like ``/usr/local``) that requires higher
100 100 permissions, you may need to run the last command with :command:`sudo`.
101 101
102 102 Windows
103 103 -------
104 104
105 105 As mentioned above, on Windows, IPython requires :mod:`distribute`, and it also
106 106 requires the PyReadline library to properly support coloring and keyboard
107 107 management (features that the default windows console doesn't have). So on
108 108 Windows, the installation procedure is:
109 109
110 110 1. Install `distribute <http://pypi.python.org/pypi/distribute>`_.
111 111
112 112 2. Install `pyreadline <http://pypi.python.org/pypi/pyreadline>`_. You can use
113 113 the command ``easy_install pyreadline`` from a terminal, or the binary
114 114 installer appropriate for your platform from the PyPI page.
115 115
116 116 3. Install IPython itself, which you can download from `PyPI
117 117 <http://pypi.python.org/pypi/ipython>`_ or from `our site
118 118 <http://ipython.org/download.html>`_. Note that on Windows 7, you *must*
119 119 right-click and 'Run as administrator' for the Start menu shortcuts to be
120 120 created.
121 121
122 122 IPython by default runs in a terminal window, but the normal terminal
123 123 application supplied by Microsoft Windows is very primitive. You may want to
124 124 download the excellent and free Console_ application instead, which is a far
125 125 superior tool. You can even configure Console to give you by default an
126 126 IPython tab, which is very convenient to create new IPython sessions directly
127 127 from the working terminal.
128 128
129 129 .. _Console: http://sourceforge.net/projects/console
130 130
131 131
132 132 Installing the development version
133 133 ----------------------------------
134 134
135 135 It is also possible to install the development version of IPython from our
136 136 `Git <http://git-scm.com/>`_ source code repository. To do this you will
137 137 need to have Git installed on your system. Then just do:
138 138
139 139 .. code-block:: bash
140 140
141 141 $ git clone https://github.com/ipython/ipython.git
142 142 $ cd ipython
143 143 $ python setup.py install
144 144
145 145 Some users want to be able to follow the development branch as it changes. If
146 146 you have :mod:`distribute` installed, this is easy. Simply replace the last
147 147 step by:
148 148
149 149 .. code-block:: bash
150 150
151 151 $ python setupegg.py develop
152 152
153 153 This creates links in the right places and installs the command line script to
154 154 the appropriate places. Then, if you want to update your IPython at any time,
155 155 just do:
156 156
157 157 .. code-block:: bash
158 158
159 159 $ git pull
160 160
161 161
162 162 Basic optional dependencies
163 163 ===========================
164 164
165 165 There are a number of basic optional dependencies that most users will want to
166 166 get. These are:
167 167
168 168 * readline (for command line editing, tab completion, etc.)
169 169 * nose (to run the IPython test suite)
170 170 * pexpect (to use things like irunner)
171 171
172 172 If you are comfortable installing these things yourself, have at it, otherwise
173 173 read on for more details.
174 174
175 175 readline
176 176 --------
177 177
178 178 As indicated above, on Windows, PyReadline is a *mandatory* dependency.
179 179 PyReadline is a separate, Windows only implementation of readline that uses
180 180 native Windows calls through :mod:`ctypes`. The easiest way of installing
181 181 PyReadline is you use the binary installer available `here
182 182 <http://pypi.python.org/pypi/pyreadline>`_.
183 183
184 184 On OSX, if you are using the built-in Python shipped by Apple, you will be
185 185 missing a full readline implementation as Apple ships instead a library called
186 186 ``libedit`` that provides only some of readline's functionality. While you may
187 187 find libedit sufficient, we have occasional reports of bugs with it and several
188 188 developers who use OS X as their main environment consider libedit unacceptable
189 189 for productive, regular use with IPython.
190 190
191 191 Therefore, we *strongly* recommend that on OS X you get the full
192 192 :mod:`readline` module. We will *not* consider completion/history problems to
193 193 be bugs for IPython if you are using libedit.
194 194
195 195 To get a working :mod:`readline` module, just do (with :mod:`distribute`
196 196 installed):
197 197
198 198 .. code-block:: bash
199 199
200 200 $ easy_install readline
201 201
202 202 .. note::
203 203
204 204 Other Python distributions on OS X (such as fink, MacPorts and the official
205 205 python.org binaries) already have readline installed so you likely don't
206 206 have to do this step.
207 207
208 208 When IPython is installed with :mod:`distribute`, (e.g. using the
209 209 ``easy_install`` command), readline is added as a dependency on OS X, and
210 210 PyReadline on Windows, and will be installed on your system. However, if you
211 211 do not use distribute, you may have to install one of these packages yourself.
212 212
213 213
214 214 nose
215 215 ----
216 216
217 217 To run the IPython test suite you will need the :mod:`nose` package. Nose
218 218 provides a great way of sniffing out and running all of the IPython tests. The
219 219 simplest way of getting nose, is to use :command:`easy_install`:
220 220
221 221 .. code-block:: bash
222 222
223 223 $ easy_install nose
224 224
225 225 Another way of getting this is to do:
226 226
227 227 .. code-block:: bash
228 228
229 229 $ easy_install ipython[test]
230 230
231 231 For more installation options, see the `nose website
232 232 <http://somethingaboutorange.com/mrl/projects/nose/>`_.
233 233
234 234 Once you have nose installed, you can run IPython's test suite using the
235 235 iptest command:
236 236
237 237 .. code-block:: bash
238 238
239 239 $ iptest
240 240
241 241 pexpect
242 242 -------
243 243
244 244 The pexpect_ package is used in IPython's :command:`irunner` script, as well as
245 245 for managing subprocesses. IPython now includes a version of pexpect in
246 246 :mod:`IPython.external`, but if you have installed pexpect, IPython will use
247 247 that instead. On Unix platforms (including OS X), just do:
248 248
249 249 .. code-block:: bash
250 250
251 251 $ easy_install pexpect
252 252
253 253 Windows users are out of luck as pexpect does not run there.
254 254
255 255 Dependencies for IPython.parallel (parallel computing)
256 256 ======================================================
257 257
258 258 :mod:`IPython.kernel` has been replaced by :mod:`IPython.parallel`,
259 259 which uses ZeroMQ for all communication.
260 260
261 261 IPython.parallel provides a nice architecture for parallel computing, with a
262 262 focus on fluid interactive workflows. These features require just one package:
263 263 PyZMQ. See the next section for PyZMQ details.
264 264
265 265 On a Unix style platform (including OS X), if you want to use
266 266 :mod:`distribute`, you can just do:
267 267
268 268 .. code-block:: bash
269 269
270 270 $ easy_install ipython[zmq] # will include pyzmq
271 271
272 272 Security in IPython.parallel is provided by SSH tunnels. By default, Linux
273 273 and OSX clients will use the shell ssh command, but on Windows, we also
274 274 support tunneling with paramiko_.
275 275
276 276 Dependencies for IPython.zmq
277 277 ============================
278 278
279 279 pyzmq
280 280 -----
281 281
282 282 IPython 0.11 introduced some new functionality, including a two-process
283 283 execution model using ZeroMQ_ for communication. The Python bindings to ZeroMQ
284 284 are found in the PyZMQ_ project, which is easy_install-able once you have
285 285 ZeroMQ installed. If you are on Python 2.6 or 2.7 on OSX, or 2.7 on Windows,
286 286 pyzmq has eggs that include ZeroMQ itself.
287 287
288 288 IPython.zmq depends on pyzmq >= 2.1.4.
289 289
290 290 Dependencies for the IPython QT console
291 291 =======================================
292 292
293 293 pyzmq
294 294 -----
295 295
296 296 Like the :mod:`IPython.parallel` package, the QT Console requires ZeroMQ and
297 297 PyZMQ.
298 298
299 299 Qt
300 300 --
301 301
302 302 Also with 0.11, a new GUI was added using the work in :mod:`IPython.zmq`, which
303 303 can be launched with ``ipython qtconsole``. The GUI is built on Qt, and works
304 304 with either PyQt, which can be installed from the `PyQt website
305 305 <http://www.riverbankcomputing.co.uk/>`_, or `PySide
306 306 <http://www.pyside.org/>`_, from Nokia.
307 307
308 308 pygments
309 309 --------
310 310
311 311 The syntax-highlighting in ``ipython qtconsole`` is done with the pygments_
312 312 project, which is easy_install-able.
313 313
314 314 .. _installnotebook:
315 315
316 316 Dependencies for the IPython HTML notebook
317 317 ==========================================
318 318
319 319 The IPython notebook is a notebook-style web interface to IPython and can be
320 320 started withe command ``ipython notebook``.
321 321
322 322 pyzmq
323 323 -----
324 324
325 325 Like the :mod:`IPython.parallel` and :mod:`IPython.frontend.qt.console`
326 326 packages, the HTML notebook requires ZeroMQ and PyZMQ.
327 327
328 328 Tornado
329 329 -------
330 330
331 331 The IPython notebook uses the Tornado_ project for its HTTP server. Tornado 2.1
332 332 is required, in order to support current versions of browsers, due to an update
333 333 to the websocket protocol.
334 334
335 335
336 336 MathJax
337 337 -------
338 338
339 339 The IPython notebook uses the MathJax_ Javascript library for rendering LaTeX
340 340 in web browsers. Because MathJax is large, we don't include it with
341 341 IPython. Normally IPython will load MathJax from a CDN, but if you have a slow
342 342 network connection, or want to use LaTeX without an internet connection at all,
343 343 you can install MathJax locally.
344 344
345 345 A quick and easy method is to install it from a python session::
346 346
347 347 from IPython.external.mathjax import install_mathjax
348 348 install_mathjax()
349 349
350 350 If you need tighter configuration control, you can download your own copy
351 351 of MathJax from http://www.mathjax.org/download/ - use the MathJax-1.1 link.
352 352 When you have the file stored locally, install it with::
353 353
354 354 python -m IPython.external.mathjax /path/to/source/mathjax-MathJax-v1.1-0-g5a7e4d7.zip
355 355
356 356 For unusual needs, IPython can tell you what directory it wants to find MathJax in::
357 357
358 358 python -m IPython.external.mathjax -d
359 359
360 All of these options require write access to the IPython install directory, so if
361 you have a system-wide Python install, it may need to be done with ``sudo``.
360 By default Mathjax will be installed in your ipython profile directory, but you
361 can make system wide install, please refere to the documentation and helper function
362 of IPython.external.mathjax
362 363
363 364 Browser Compatibility
364 365 ---------------------
365 366
366 367 The notebook uses WebSockets and the flexible box model. These features are
367 368 available in the following browsers:
368 369
369 370 * Chrome
370 371 * Safari
371 372 * Firefox 6 and above
372 373 * Firefox 4 and 5: These browsers have WebSocket support, but it is disabled by
373 374 default. If you're unable to upgrade, you can enable it by entering ``about:config``
374 375 in the URL bar and then setting ``network.websocket.enabled`` and
375 376 ``network.websocket.override-security-block`` to ``true``.
376 377
377 378 Internet Explorer 9 does not support WebSockets or the flexible box model, but
378 379 these features should appear in Internet Explorer 10.
379 380
380 381
381 382 .. _ZeroMQ: http://www.zeromq.org
382 383 .. _PyZMQ: https://github.com/zeromq/pyzmq
383 384 .. _paramiko: https://github.com/robey/paramiko
384 385 .. _pygments: http://pygments.org
385 386 .. _pexpect: http://www.noah.org/wiki/Pexpect
386 387 .. _Tornado: http://www.tornadoweb.org
387 388 .. _MathJax: http://www.mathjax.org
General Comments 0
You need to be logged in to leave comments. Login now