报错如下:
原因:
是由于 python3.8 asyncio 在 windows 上默认使用 ProactorEventLoop 造成的,而不是之前的 SelectorEventLoop。jupyter 依赖 tornado,而 tornado 在 window 上需要使用 SelectorEventLoop,所以产生这个报错。
On Windows, Tornado requires the ``WindowsSelectorEventLoop``. This is
the default in Python 3.7 and older, but Python 3.8 defaults to an
event loop that is not compatible with Tornado. Applications that use
Tornado on Windows with Python 3.8 must call
``asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())``
at the beginning of their ``main`` file/function.
而对于像 jupyter 这种依赖于 tornado 的库,则无法用这种方式。目前这个问题已由 python 官方跟踪:https://bugs.python.org/issue37373
临时解决办法:
修改 python安装目录\Lib\site-packages\tornado\platform\asyncio.py
import asyncio
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
也就是在 import asyncio
之后,手动让 tornado 选择 SelectorEventLoop,这样 jupyter 就可以正常使用了。
所以现在其实不太建议升级到 python3.8
Python目前最新版本是3.8.0,2019年10月14日发布的,从学习者与开发者角度,都不应该选择最新版本,建议选择第一版是至少一年前发布的,这样很多第三方库也跟进变化了。
2019年12月10日,推荐选择:
3.7.x版本,因为3.7.0版本是2018年6月发布的