- Enable strict typing #984 (@blink1073)
- Update typings for mypy 1.6 #983 (@blink1073)
(GitHub contributors page for this release)
- Test on python 3.12 #978 (@blink1073)
- Update typing for traitlets 5.11 #977 (@blink1073)
- chore: update pre-commit hooks #975 (@pre-commit-ci)
- Update typings for traitlets 5.10.1 #974 (@blink1073)
- Do not use datetime.utcnow() that is deprecated in Python 3.12 #972 (@ellert)
- Use sp-repo-review #971 (@blink1073)
- Bump actions/checkout from 3 to 4 #968 (@dependabot)
(GitHub contributors page for this release)
@blink1073 | @dependabot | @ellert | @pre-commit-ci
- Support external kernels #961 (@davidbrochart)
(GitHub contributors page for this release)
@blink1073 | @davidbrochart | @jkitchin | @kevin-bates | @pre-commit-ci | @tmaxwell-anthropic
(GitHub contributors page for this release)
- Use local coverage #945 (@blink1073)
- Add more project URLs #944 (@fcollonval)
(GitHub contributors page for this release)
@blink1073 | @fcollonval | @minrk | @pre-commit-ci
(GitHub contributors page for this release)
@blink1073 | @brichet | @minrk | @pre-commit-ci
- Fix kernelspec print output #933 (@minrk)
- Don't emit a trailng newline in base64-encoded data like 'image/png' #931 (@xl0)
- Add license #934 (@dcsaba89)
- Improving jsonutil tests #929 (@andrehora)
(GitHub contributors page for this release)
@andrehora | @blink1073 | @dcsaba89 | @kevin-bates | @minrk | @pre-commit-ci | @xl0
- Add papermill downstream check and fix kernel client replies #925 (@blink1073)
- Adopt more ruff rules #924 (@blink1073)
- Prefer print in kernelspecapp #923 (@blink1073)
(GitHub contributors page for this release)
- Fix json_output in kernelspec app #921 (@blink1073)
(GitHub contributors page for this release)
This release is primarily focused on improving asyncio
support, while aiming to have minimal API changes.
- Remove nest-asyncio dependency #835 (@blink1073)
- Allow interrupt during restart of pending kernels #898 (@blink1073)
- Fix connection reconciliation to handle restarts #882 (@kevin-bates)
- Reconcile connection information #879 (@kevin-bates)
- Workaround for launch bug #861 (@blink1073)
- Defer creation of ready future #858 (@blink1073)
- Fix handling of initial ready promise #854 (@blink1073)
- Revert "Fix pending kernels again" #853 (@blink1073)
- Fix pending kernels again #845 (@blink1073)
- Use pytest_asyncio fixture #826 (@davidbrochart)
- MAINT: Don't format log in log call. #919 (@Carreau)
- Remove deprecated zmq imports #915 (@blink1073)
- MAINT: consistently use relative imports. #912 (@Carreau)
- Sync lint deps #911 (@blink1073)
- MAINT: Proper typing and cast #906 (@Carreau)
- MAINT: [async]start_kernel should only take kwarg only. #905 (@Carreau)
- Add more ci checks #903 (@blink1073)
- Allow releasing from repo #899 (@blink1073)
- Fix jupyter_core pinning #896 (@ophie200)
- Adopt ruff and reduce pre-commit usage #895 (@blink1073)
- Use pytest-jupyter #891 (@blink1073)
- Import ensure_async and run_sync from jupyter_core #889 (@davidbrochart)
- Use base setup dependency type #888 (@blink1073)
- More CI Cleanup #886 (@blink1073)
- More coverage #885 (@blink1073)
- Clean up workflow and pyproject #884 (@blink1073)
- Add more coverage #877 (@blink1073)
- Add coverage config #876 (@blink1073)
- Bump actions/setup-python from 2 to 4 #874 (@dependabot)
- Bump actions/checkout from 2 to 3 #873 (@dependabot)
- Use platform dirs in tests #872 (@blink1073)
- Clean up types and remove use of entrypoints #871 (@blink1073)
- Add dependabot #870 (@blink1073)
- Support Python 3.8-3.11 #866 (@blink1073)
- Fix assertion in
TestSession.test_serialize
#860 (@samrat) - Maintenance cleanup #856 (@blink1073)
- Ignore warnings in prereleases test #844 (@blink1073)
- Use hatch for version #837 (@blink1073)
- Move tests to top level #834 (@blink1073)
- Fix nbconvert downstream test #827 (@blink1073)
- Reflect current protocol version in documentation #918 (@SylvainCorlay)
- Add full api docs #908 (@blink1073)
- Add more ci checks #903 (@blink1073)
- Switch to pydata sphinx theme #840 (@blink1073)
(GitHub contributors page for this release)
@arogozhnikov | @blink1073 | @Carreau | @ccordoba12 | @davidbrochart | @dependabot | @kevin-bates | @meeseeksdev | @minrk | @ophie200 | @pre-commit-ci | @samrat | @SylvainCorlay | @Zsailer
- Allow releasing from repo #899 (@blink1073)
(GitHub contributors page for this release)
- Allow interrupt during restart of pending kernels #898 (@blink1073)
(GitHub contributors page for this release)
- Fix jupyter_core pinning #896 (@ophie200)
- Adopt ruff and reduce pre-commit usage #895 (@blink1073)
(GitHub contributors page for this release)
@blink1073 | @davidbrochart | @ophie200 | @pre-commit-ci
No merged PRs
- Use pytest-jupyter #891 (@blink1073)
- Import ensure_async and run_sync from jupyter_core #889 (@davidbrochart)
- Use base setup dependency type #888 (@blink1073)
- More CI Cleanup #886 (@blink1073)
- More coverage #885 (@blink1073)
- Clean up workflow and pyproject #884 (@blink1073)
(GitHub contributors page for this release)
@arogozhnikov | @blink1073 | @davidbrochart | @kevin-bates | @pre-commit-ci
- Fix connection reconciliation to handle restarts #882 (@kevin-bates)
- Add more coverage #877 (@blink1073)
(GitHub contributors page for this release)
- Reconcile connection information #879 (@kevin-bates)
- Add coverage config #876 (@blink1073)
- Bump actions/setup-python from 2 to 4 #874 (@dependabot)
- Bump actions/checkout from 2 to 3 #873 (@dependabot)
- Clean up types and remove use of entrypoints #871 (@blink1073)
- Add dependabot #870 (@blink1073)
(GitHub contributors page for this release)
@blink1073 | @dependabot | @kevin-bates | @pre-commit-ci
- Use platform dirs in tests #872 (@blink1073)
- Support Python 3.8-3.11 #866 (@blink1073)
(GitHub contributors page for this release)
- Workaround for launch bug #861 (@blink1073)
- Defer creation of ready future #858 (@blink1073)
- Fix assertion in
TestSession.test_serialize
#860 (@samrat) - Maintenance cleanup #856 (@blink1073)
(GitHub contributors page for this release)
@blink1073 | @pre-commit-ci | @samrat
- Remove nest-asyncio dependency #835 (@blink1073)
- Fix handling of initial ready promise #854 (@blink1073)
- Use pytest_asyncio fixture #826 (@davidbrochart)
- Ignore warnings in prereleases test #844 (@blink1073)
- Use hatch for version #837 (@blink1073)
- Move tests to top level #834 (@blink1073)
- Fix nbconvert downstream test #827 (@blink1073)
- Switch to pydata sphinx theme #840 (@blink1073)
(GitHub contributors page for this release)
@blink1073 | @ccordoba12 | @davidbrochart | @minrk | @pre-commit-ci | @Zsailer
- Use tornado 6.2's PeriodicCallback in restarter #822 (@vidartf)
- Make _stdin_hook_default async #814 (@davidbrochart)
- [pre-commit.ci] pre-commit autoupdate #824 (@pre-commit-ci)
- [pre-commit.ci] pre-commit autoupdate #821 (@pre-commit-ci)
- [pre-commit.ci] pre-commit autoupdate #820 (@pre-commit-ci)
- [pre-commit.ci] pre-commit autoupdate #818 (@pre-commit-ci)
- [pre-commit.ci] pre-commit autoupdate #816 (@pre-commit-ci)
- [pre-commit.ci] pre-commit autoupdate #815 (@pre-commit-ci)
- [pre-commit.ci] pre-commit autoupdate #812 (@pre-commit-ci)
- [pre-commit.ci] pre-commit autoupdate #810 (@pre-commit-ci)
- [pre-commit.ci] pre-commit autoupdate #809 (@pre-commit-ci)
- [pre-commit.ci] pre-commit autoupdate #807 (@pre-commit-ci)
(GitHub contributors page for this release)
@blink1073 | @davidbrochart | @helioz11 | @pre-commit-ci | @vidartf
- Revert latest changes to
ThreadedZMQSocketChannel
because they break Qtconsole #803 (@ccordoba12)
- Fix sphinx 5.0 support #804 (@blink1073)
- [pre-commit.ci] pre-commit autoupdate #799 (@pre-commit-ci)
(GitHub contributors page for this release)
@blink1073 | @ccordoba12 | @pre-commit-ci
(GitHub contributors page for this release)
- [pre-commit.ci] pre-commit autoupdate #792 (@pre-commit-ci)
- Use hatch backend #789 (@blink1073)
- [pre-commit.ci] pre-commit autoupdate #788 (@pre-commit-ci)
- Use flit build backend #781 (@blink1073)
(GitHub contributors page for this release)
@blink1073 | @joouha | @pre-commit-ci
- Check that channels exist before asking if they are alive #785 (@ccordoba12)
- Unicode error correction using Error Handler #779 (@hxawax)
- Allow bot PRs to be automatically labeled #784 (@blink1073)
- [pre-commit.ci] pre-commit autoupdate #783 (@pre-commit-ci)
(GitHub contributors page for this release)
@blink1073 | @ccordoba12 | @hxawax | @pre-commit-ci
- Fix shutdown and cleanup behavior #772 (@blink1073)
- [pre-commit.ci] pre-commit autoupdate #773 (@pre-commit-ci)
- [pre-commit.ci] pre-commit autoupdate #770 (@pre-commit-ci)
- Improve mypy config #769 (@blink1073)
- Clean up pre-commit #768 (@blink1073)
(GitHub contributors page for this release)
- Include py.typed file #766 (@blink1073)
- [pre-commit.ci] pre-commit autoupdate #765 (@pre-commit-ci)
- More Cleanup #764 (@blink1073)
(GitHub contributors page for this release)
@blink1073 | @davidbrochart | @echarles | @pre-commit-ci
- Handle Warnings #760 (@blink1073)
(GitHub contributors page for this release)
- Json packer: handle TypeError and fallback to old json_clean #752 (@martinRenou)
- Prefer sending signals to kernel process group #743 (@kevin-bates)
- Mock is not needed #758 (@hroncok)
- Add pytest opts and clean up workflows #757 (@blink1073)
- Clean up dependency handling #750 (@blink1073)
- Use built in run cancellation #742 (@blink1073)
(GitHub contributors page for this release)
@blink1073 | @davidbrochart | @echarles | @hroncok | @kevin-bates | @martinRenou | @you-n-g
(GitHub contributors page for this release)
- Test against all kernels in jupyter kernel test and clean up CI #731 (@blink1073)
- Replace master with main #729 (@davidbrochart)
- [DOC] improve kernel provisioner doc #730 (@abzymeinsjtu)
- add changelog for message spec #525 (@minrk)
(GitHub contributors page for this release)
@abzymeinsjtu | @blink1073 | @BoPeng | @davidbrochart | @minrk | @rgbkrk | @willingc | @Zsailer
- Add support for pending kernels #712 (@blink1073)
- Enforce labels on PRs #720 (@blink1073)
(GitHub contributors page for this release)
@blink1073 | @ci4ic4 | @davidbrochart | @kevin-bates | @vidartf
- Fallback to the old ipykernel "json_clean" if we are not able to serialize a JSON message #708 (@martinRenou)
- Add test for serializing bytes #707 (@martinRenou)
(GitHub contributors page for this release)
- Use logger.warning instead of deprecated warn method #700 (@kevin-bates)
(GitHub contributors page for this release)
- Fix json_default so that it's closer to what ipykernel had before #698 (@martinRenou)
- Clean up the pending task #697 (@shingo78)
- fix kernel can only restart once issue #695 (@mofanke)
- Prevent failure if kernel is not found when shutting it down #694 (@martinRenou)
(GitHub contributors page for this release)
@davidbrochart | @martinRenou | @mofanke | @shingo78
- Address missing
local-provisioner
scenario #692 (@kevin-bates) - use
load_connection_info(info)
when constructing a blocking client #688 (@minrk)
(GitHub contributors page for this release)
- Improve migration guide #685 (@davidbrochart)
(GitHub contributors page for this release)
@blink1073 | @davidbrochart | @dhirschfeld | @jankatins | @kevin-bates | @minrk | @takluyver | @yuvipanda
- Use formal method names when called internally #683 (@kevin-bates)
(GitHub contributors page for this release)
The 7.0 release brings a major feature in Kernel Provisioners, which enable the ability for third parties to manage the lifecycle of a kernel's runtime environment.
Being a major release, there are some backward incompatible changes. Please see the migration guide for further details.
- Kernel Provisioning - initial implementation #612 (@kevin-bates)
- Fix up some async method aliases in KernelManager #670 (@kevin-bates)
- Support
answer_yes
when removing kernel specs #659 (@davidbrochart) - Include process ID in message ID #655 (@takluyver)
- Fix qtconsole issues #638 (@davidbrochart)
- Added debugger key in
kernel_info_reply
#486 (@JohanMabille) - Prepare for use with Jupyter Releaser #676 (@afshin)
- Force install
jupyter_client
master #675 (@davidbrochart) - Fix project name #674 (@vidartf)
- Rename trait to
allowed_kernelspecs
#672 (@blink1073) - Remove block parameter from
get_msg()
#671 (@davidbrochart) - Only import
nest_asyncio
locally #665 (@SylvainCorlay) - Use a default serializer that is not only for date types #664 (@martinRenou)
- Updated
debug_info_response
#657 (@JohanMabille) - Do not block on exit #651 (@impact27)
- Update test kernel with native coroutine, remove
async_generator
dependency #646 (@kevin-bates) setup.py
and CI improvements #645 (@dolfinus)- Test downstream projects #644 (@davidbrochart)
- Remove deprecations in kernel manager #643 (@kevin-bates)
- Add
block=True
back toget_msg()
#641 (@davidbrochart) - Pin
python>=3.6.1
#636 (@davidbrochart) - Use
pre-commit
#631 (@davidbrochart) - Attempt CI with
ipykernel
6.0 prerelease #629 (@SylvainCorlay) - Make
KernelManager
subclass tests DRY #628 (@davidbrochart) - Add tests to ensure MultiKernelManager subclass methods are called #627 (@kevin-bates)
- Add type annotations, refactor sync/async #623 (@davidbrochart)
- Create migration guide #681 (@blink1073)
- Update changelog for 7.0.0rc0 #673 (@blink1073)
- Added documentation for
richInspectVariables
request #654 (@JohanMabille) - Change to
edit_magic
payload #652 (@yitzchak) - Added missing documentation for the inspectVariables request and resp… #649 (@JohanMabille)
- Add status field to other replies in documentation #648 (@yitzchak)
(GitHub contributors page for this release)
@afshin | @blink1073 | @Carreau | @ccordoba12 | @davidbrochart | @dhirschfeld | @dolfinus | @echarles | @impact27 | @JohanMabille | @kevin-bates | @martinRenou | @mattip | @minrk | @MSeal | @SylvainCorlay | @takluyver | @vidartf | @yitzchak
- Yanked (PyPI) and marked as broken (conda)
- Yanked (PyPI) and marked as broken (conda)
- Shutdown request sequence has been modified to be more graceful, it
now is preceded by interrupt, and will also send a
SIGTERM
before forcibly killing the kernel. #620 - Removal of
ipython_genutils
as a dependency. It was implicit before; but required by at least traitlets thus avoiding issues. We are working on completely removing it from all jupyter dependencies; as it might lead to issues packaging for Python 3.10, and was mostly used for compatibility with python 2. (#620, #605) - Address a race condition between
shutdown_kernel
and restarter. (#607.)
See the full list of pull-requests
- Move jedi pinning to test requirements #599
- Add change parameter needed for observer method of kernel_spec_manager trait #598
- Pin jedi<=0.17.2 #596
- Doc updates (#563, #564, #587)
- Fix path to the connection file #568
- Code cleanup (#574, #579)
- Silence kill_kernel when no process is present #576
- Remove extra_env and corresponding test #581
- Add documentation dependencies to setup.py #582
- Fix for Windows localhost IP addresses #584
- Drop Travis CI, add GitHub Actions #586
- Adapt KernelManager._kernel_spec_manager_changed to observe #588
- Allow use ~/ in the kernel's command or its arguments #589
- Change wait_for_ready logic #592
- Fix test_session with msgpack v1 #594
- Removed warnings in more cases for KernelManagers that use new cleanup method #560
- Some improved tests with a conversion to pytest pattern #561
- Gracefully Close ZMQ Context upon kernel shutdown to fix memory leak #548
- Fix for chained exceptions to preserve stacks (#552, #554)
- Fix start_kernel error when passing kernel_id #547
- Update to releasing docs #543
(Deleted release with incorrect local files)
- Add AsyncKernelClient client_class to AsyncKernelManager #542
- Doc fix for xeus hyperlinks #540
- Doc typo fix #539
- Fixed a bug causing clients to sometimes hang after a stop call was made #536
This release includes support for asyncio patterns! Downstream tools should soon have releases to additionally support async patterns.
- AsyncKernelManager and AsyncMultiKernelManager are now available for async jupyter_client interactions (#528, #529)
- Removed unused sphinx dependency (#518, #518).
- Added install instructions for pip to documentation #521
- Improved docs around version protocol and messaging (#522, #526)
The git history had to be reworked heavily in merging 5.x and master, so a link to all the changes at once in github had been left out as it's just confusing.
An exciting change in this release is some async support (huge thanks to @davidbrochart for doing most of the work)! See linked PR below for more details, we're working on integrating this into nbclient as well in the near future.
New Features:
- Added async API #506
Changes:
- Python 3.8 testing and support added #509
- Session.msg_id optimization #493
- Only cache ports if the cache_ports flag is set to True #492
- Removed direct dependency on pywin32 as this is now in jupyter core #489
Fixes:
- Prevent two kernels to have the same ports #490
Docs:
- Document the handling of error in do_execute #500
Breaking changes:
- Dropped support for Python 2.7!
- Changed secure_write to be imported from jupyter_core with fix for extended usernames in Windows #483.
- Fixed issue with non-english windows permissions #478. Potential issue still open in use with jupyerlab.
- Important files creation now checks umask permissions #469.
- Fix bug with control channel socket introduced in 5.3.0 #456.
New Features:
Changes:
- Control channel now in the public API #447
- Closing Jupyter Client is now faster #420
- Pip support improvements #421
Breaking changes:
- Dropped support for Python 3.3 and 3.4 (upstream packages dropped support already)
- Fix hang on close in
.ThreadedKernelClient
(used in QtConsole) when using tornado with asyncio (default behavior of tornado 5, see #352). - Fix errors when using deprecated
.KernelManager.kernel_cmd
(#343, #344).
- Fix
.KernelSpecManager.get_all_specs
method in subclasses that only override.KernelSpecManager.find_kernel_specs
and.KernelSpecManager.get_kernel_spec
. See #338 and #339. - Eliminate occasional error messages during process exit #336.
- Improve error message when attempting to bind on invalid address #330.
- Add missing direct dependency on tornado #323.
- Add parenthesis to conditional pytest requirement to work around a
bug in the
wheel
package, that generate a.whl
which otherwise always depends onpytest
see #324and #325.
- 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
kernelspecs
andmsging_interrupt
#294.
- Kernels can now opt to be interrupted by a message sent on the
control channel instead of a system signal. See
- New
jupyter kernel
command to launch an installed kernel by name #240. - Kernelspecs where the command starts with e.g.
python3
orpython3.6
---matching the versionjupyter_client
is running on---are now launched with the same Python executable as the launching process #306. This extends the special handling ofpython
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 #289. - Kernelspecs now have an optional
metadata
field to hold arbitrary metadata about kernels---seekernelspecs
#274. - Make the
KernelRestarter
class used by aKernelManager
configurable #290. - When killing a kernel on Unix, kill its process group #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 #279.
- Avoid unnecessary filesystem operations when finding a kernelspec
with
.KernelSpecManager.get_kernel_spec
#311. .KernelSpecManager.get_all_specs
will no longer raise an exception on encountering an invalidkernel.json
file. It will raise a warning and continue #310.- Check for non-contiguous buffers before trying to send them through ZMQ #258.
- Compatibility with upcoming Tornado version 5.0 #304.
- Simplify setup code by always using setuptools #284.
- Soften warnings when setting the sticky bit on runtime files fails #286.
- Various corrections and improvements to documentation.
-
Define Jupyter protocol version 5.2, resolving ambiguity of
cursor_pos
field in the presence of unicode surrogate pairs.::: {.seealso}
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.