Changes in Jupyter Client — jupyter_client 5.1.0 documentation

# Changes in Jupyter Client

## 5.2

5.2 on GitHub

- Define Jupyter protocol version 5.3:
  - Kernels can now opt to be interrupted by a message sent on the control channel instead of a system signal. See Kernel specs and Kernel interrupt (PR #294).
- New `jupyter kernel` command to launch an installed kernel by name (PR #240).
- Kernelspecs where the command starts with e.g. `python3` or `python3.6`—matching the version `jupyter_client` is running on—are now launched with the same Python executable as the launching process (PR #306). This extends the special handling of `python` added in 5.0.
- Command line arguments specified by a kernelspec can now include `{resource_dir}`, which will be substituted with the kernelspec resource directory path when the kernel is launched (PR #289).
- Kernelspecs now have an optional `metadata` field to hold arbitrary metadata about kernels—see Kernel specs (PR #274).
- Make the `KernelRestarter` class used by a `KernelManager` configurable (PR #290).
- When killing a kernel on Unix, kill its process group (PR #314).
- If a kernel dies soon after starting, reassign random ports before restarting it, in case one of the previously chosen ports has been bound by another process (PR #279).
- Check for non-contiguous buffers before trying to send them through ZMQ (PR #258).
- Compatibility with upcoming Tornado version 5.0 (PR #304).
- Simplify setup code by always using setuptools (PR #284).
- Soften warnings when setting the sticky bit on runtime files fails (PR #286).
- Various corrections and improvements to documentation.

## 5.1

5.1 on GitHub

- Define Jupyter protocol version 5.2, resolving ambiguity of `cursor_pos` field in the presence of unicode surrogate pairs.

  See also

  cursor_pos and unicode offsets

- 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.

## 5.0

### 5.0.1

5.0.1 on GitHub

- Update internal protocol version number to 5.1, which should have been done in 5.0.0.

### 5.0.0

5.0.0 on GitHub

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, matching `KernelManager.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 resolving `python` 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:

- `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.

## 4.4

### 4.4.0

4.4 on GitHub

- 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.

## 4.3

### 4.3.0

4.3 on GitHub

- Adds `--sys-prefix` argument to jupyter kernelspec install, for better symmetry with jupyter nbextension install, etc.

## 4.2

### 4.2.2

4.2.2 on GitHub

- Another fix for the `start_new_kernel()` issue in 4.2.1 affecting slow-starting kernels.

### 4.2.1

4.2.1 on GitHub

- Fix regression in 4.2 causing `start_new_kernel()` to fail while waiting for kernels to become available.

### 4.2.0

4.2.0 on GitHub

- 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

## 4.1

### 4.1.0

4.1.0 on GitHub

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

## 4.0

The first release of Jupyter Client as its own package.