Define Jupyter protocol version 5.2, resolving ambiguity of
cursor_pos
field in the presence of unicode surrogate pairs.cursor_pos_unicode_note
- Add
Session.clone
for making a copy of a Session object without sharing the digest history. Reusing a single Session object to connect multiple sockets to the same IOPub peer can cause digest collisions. - Avoid global references preventing garbage collection of background threads.
- Update internal protocol version number to 5.1, which should have been done in 5.0.0.
New features:
- Implement Jupyter protocol version 5.1.
Introduce
jupyter run
command for running scripts with a kernel, for instance:jupyter run --kernel python3 myscript.py
- New method
.BlockingKernelClient.execute_interactive
for running code and capturing or redisplaying its output. - New
KernelManager.shutdown_wait_time
configurable for adjusting the time for a kernel manager to wait after politely requesting shutdown before it resorts to forceful termination.
Fixes:
- Set sticky bit on connection-file directory to avoid getting cleaned up.
jupyter_client.launcher.launch_kernel
passes through additional options to the underlying Popen, matchingKernelManager.start_kernel
.- Check types of
buffers
argument in.Session.send
, so that TypeErrors are raised immediately, rather than in the eventloop.
Changes:
- In kernelspecs, if the executable is the string
python
(as opposed to an absolute path),sys.executable
will be used rather than resolvingpython
on PATH. This should enable Python-based kernels to install kernelspecs as part of wheels. - kernelspec names are now validated. They should only include ascii letters and numbers, plus period, hyphen, and underscore.
Backward-incompatible changes:
- :py
.datetime
objects returned in parsed messages are now always timezone-aware. Timestamps in messages without timezone info are interpreted as the local timezone, as this was the behavior in earlier versions.
- Add
.KernelClient.load_connection_info
on KernelClient, etc. for loading connection info directly from a dict, not just from files. - Include parent headers when adapting messages from older protocol implementations (treats parent headers the same as headers).
- Compatibility fixes in tests for recent changes in ipykernel.
- Adds
--sys-prefix
argument tojupyter kernelspec install
, for better symmetry withjupyter nbextension install
, etc.
- Another fix for the
start_new_kernel
issue in 4.2.1 affecting slow-starting kernels.
- Fix regression in 4.2 causing
start_new_kernel
to fail while waiting for kernels to become available.
- added
jupyter kernelspec remove
for removing kernelspecs - allow specifying the environment for kernel processes via the
env
argument - added
name
field to connection files identifying the kernelspec name, so that consumers of connection files (alternate frontends) can identify the kernelspec in use - added
KernelSpecManager.get_all_specs
for getting all kernelspecs more efficiently - various improvements to error messages and documentation
Highlights:
- Setuptools fixes for
jupyter kernelspec
jupyter kernelspec list
includes paths- add
KernelManager.blocking_client
- provisional implementation of
comm_info
requests from upcoming 5.1 release of the protocol
The first release of Jupyter Client as its own package.