Jupyter "500: Internal Server Error"; "ImportError: cannot import name ConverterMapping"

Jupyter "500: Internal Server Error"; "ImportError: cannot import name ConverterMapping"

我正在尝试在全新安装的 Ubuntu 19.04 上使用 Jupyter notebook。我已经 运行 完成了通常的安装步骤,但 Jupyter 无法正常工作。当我尝试打开笔记本时,我得到

500 : Internal Server Error

当我查看终端时,我发现 Jupyter 遇到了错误

ImportError: cannot import name ConverterMapping

我已经搜索并找到 questions/answers Jupyter 内部服务器错误的其他原因,但我找不到解决 ConverterMapping 问题的方法。我尝试卸载(pip uninstall ...)并重新安装(pip install --user ...)所有与 Jypyter 相关的包,但没有效果。

更新:

常规系统更新后,问题又出现了。这向我表明,删除 pip 已安装软件包的 .local 目录(然后重新安装)不一定是长期修复,因为自动更新似乎会导致问题再次出现。 其他 包(通过 apt 安装)也有可能,虽然没有明确与 python 相关,但以某种方式改变了 python 环境,从而破坏了 Jupyter notebooks .

如有任何想法或建议,我们将不胜感激。

(回答我自己的问题)

根据我的经验,这些问题通常是由通过 apt 安装的 python 软件包与通过 pip 安装的软件包之间的兼容性问题引起的。

不幸的是,我无法重建安装 jupyter/scipy/etc 环境所采取的一系列冗长步骤。某些软件包必须通过 apt 引入,而其他软件包必须通过 pip 引入,导致版本冲突。

这种方法最初解决了问题:

  • 跟随 this answer,我 运行 python -c "import site; print(site.USER_BASE)" 找到 pip 安装 --user 包的位置
  • 对我来说,这是 ~/.local
  • 我将 ~/.local 移动到 ~/.local_disabled 以消除 所有 本地安装的软件包
  • 至此,Jupyter又工作了,(肯定是通过apt随系统python一起安装的)。
  • 我只添加了用户包的最小子集,并且会留意不兼容问题。
  • 我认为避免通过 apt 拉入 Jupyter/ipython 可能是将来避免此问题的更好方法。

后续系统更新后,问题重现

这似乎证实了问题是由通过 apt 安装的 python 包和通过 pip 安装的包之间的 mis-match 引起的。这次,为了解决这个问题,我:

  • 卸载了通过 apt 安装的 python 包(但不是使用 Ubuntu 安装的核心系统的一部分)。这主要包括 jupyter 及其许多依赖项。
  • 使用 pip install jupyter --user 重新安装了 Jupyter。
  • 这是有效的(目前)。

(请随意edit/comment/extend这个答案。)

我有过类似的经历,找到了Mrule的答案。 deleting/renaming .local 也对我有用,但他的长期解决方案并不令人遗憾。因此,我深入挖掘以找出第一个解决方案有效的原因。

原来 which jupyter.local 未被删除时返回 $HOME/.local/bin/jupyter,而在我删除时返回 /usr/bin/jupyter。所以问题出在 pip 包中(通过 pip install --user jupyter 选项安装在 .local 中的包)。

我以前做过几次 sudo pip uninstall jupyter,但这并没有删除 .local 中的包(参见 )。你必须做 pip uninstall jupyter 而不是 sudo 来卸载主目录中的那些(或手动删除它们)。我通过使用 pip list | grep jupyterapt list | grep jupyter 查找系统中的任何其他与 jupyter 相关的软件包来卸载它们。

然后终于通过 sudo apt install jupyter 重新安装了 jupyter。现在它似乎起作用了。

最重要的是,通过 pip 系统范围和主目录 (.local) 安装的软件包与通过 apt 安装的软件包存在某种冲突(我找不到确切原因)。

对此最安全的解决方案是创建一个虚拟环境,并从中 运行 你的 jupyter。这样就清楚的把pip和apt的所有操作分开了。它对我有用。我用 Ubuntu

要创建虚拟环境,运行 :

1)sudo pip install --upgrade virtualenv (install virtualenv)

2)virtualenv  xyz --python=python3.7  (xyz is the name of the new virtual environment)

3) cd into the directory of xyz

4) source ./bin/activate 

5)pip install jupyter