Jupyter Notebook with Python 3.8 - NotImplementedError

PythonWindowsJupyter NotebookTornado

Python Problem Overview


Upgraded recently to Python 3.8, and installed jupyter. However, when trying to run jupyter notebook getting the following error:

  File "c:\users\user\appdata\local\programs\python\python38\lib\site-packages\tornado\platform\asyncio.py", line 99, in add_handler
    self.asyncio_loop.add_reader(fd, self._handle_events, fd, IOLoop.READ)
  File "c:\users\user\appdata\local\programs\python\python38\lib\asyncio\events.py", line 501, in add_reader
    raise NotImplementedError
NotImplementedError

I know Python 3.8 on windows switched to ProactorEventLoop by default, so I suspect it is related to this.

Jupyter does not support Python 3.8 at the moment? Is there a work around?

Python Solutions


Solution 1 - Python

EDIT

This issue exists in older versions of Jupyter Notebook and was fixed in version 6.0.3 (released 2020-01-21). To upgrade to the latest version run:

pip install notebook --upgrade


Following on this issue through GitHub, it seems the problem is related to the tornado server that jupyter uses.

For those that can't wait for an official fix, I was able to get it working by editing the file tornado/platform/asyncio.py, by adding:

import sys

if sys.platform == 'win32':
    asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())

After the main imports.

I expect an official fix for this soon, however.

Solution 2 - Python

Revising the answer in 2019

Change the end part of the file C:\Users\{USER-NAME}\AppData\Local\Programs\Python\Python38\Lib\asyncio\__init__.py

From

if sys.platform == 'win32':  # pragma: no cover
    from .windows_events import *
    __all__ += windows_events.__all__
else:
    from .unix_events import *  # pragma: no cover
    __all__ += unix_events.__all__

To

import asyncio

if sys.platform == 'win32':
    from .windows_events import *
    asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
    __all__ += windows_events.__all__
else:
    from .unix_events import *  # pragma: no cover
    __all__ += unix_events.__all__

Solution 3 - Python

For me, I had to reinstall asyncio

pip install asyncio --upgrade

And upgrade the kernel package

pip install ipykernel --upgrade

Solution 4 - Python

I solved this problem by changing the python version from 3.9 to 3.7. (Windows).

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questiondrec4sView Question on Stackoverflow
Solution 1 - Pythondrec4sView Answer on Stackoverflow
Solution 2 - PythonMirwise KhanView Answer on Stackoverflow
Solution 3 - PythonpenguinsView Answer on Stackoverflow
Solution 4 - PythonmingView Answer on Stackoverflow