JupyterHub 0.9.4 root登录报500 Internal Server Error如何解决
问题原因
核心为Python版本与依赖包版本不兼容,具体触发逻辑如下:
- 从运行日志可识别到当前环境使用的是Python 3.5版本,而变量类型注解语法(形如
time_to_dead: float = 1.0)是Python 3.6才新增的特性,低版本Python无法识别该语法,直接抛出SyntaxError - 安装JupyterHub时未锁定依赖版本,pip默认安装了最新版的
jupyter_client、notebook等依赖库,而这些库的新版本早已停止对Python 3.5的支持,使用了大量3.6+的新语法 - 单用户进程
jupyterhub-singleuser启动时直接语法异常退出,就会返回Spawner启动失败、服务30秒无响应的报错
多Python环境下该问题更容易出现,是因为系统多Python版本的pip、依赖路径混用,更容易出现版本不匹配的情况。
解决方案
提供两种可选方案,根据环境需求选择即可:
方案一:升级Python版本(更推荐)
将运行JupyterHub的Python版本升级到3.6及以上,优先选择3.8、3.9这类长期支持版本,在新环境下重新安装JupyterHub 0.9.4即可从根本解决语法兼容问题。
方案二:锁定兼容Python3.5的依赖版本
如果当前环境必须保留Python 3.5,可手动安装最后一批支持Python3.5的依赖版本,执行命令:
pip install jupyter_client==5.3.4 notebook==6.0.3 tornado==5.1.1
额外注意事项
- 若要允许root用户启动单用户服务,需要在
jupyterhub_config.py中新增配置:c.Spawner.args = ['--allow-root'],否则即使依赖无问题,root用户的单用户服务也会启动失败 - 建议使用虚拟环境隔离JupyterHub的运行环境,避免和系统自带的Python环境、其他Python项目的依赖产生冲突
内容的提问来源于stack exchange,提问作者v1nw1n
相关产品推荐
相关产品推荐

