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 jupyter
和 apt 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
我正在尝试在全新安装的 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 jupyter
和 apt 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