IPython(jupyter)中的完成现在可以工作(意外的关键字参数'column')

Posted

技术标签:

【中文标题】IPython(jupyter)中的完成现在可以工作(意外的关键字参数\'column\')【英文标题】:Completion in IPython (jupyter) does now work (unexpected keyword argument 'column')IPython(jupyter)中的完成现在可以工作(意外的关键字参数'column') 【发布时间】:2021-04-26 19:28:09 【问题描述】:

我使用的是 jupyter notebook,它工作正常,但是当我按 TAB 时,自动完成不起作用。 我已经在 *** 中检查了所有类似的案例,但没有一个解决方案对我有用。 我也尝试过对 IPython、IPYKernel、Jedi 和 Tornado 进行“pip 升级”,升级工作正常,但问题仍然存在。 我在 Firefox、Chrome 和 Edge 中尝试过。 当我按 TAB 时,我可以在终端中看到这些错误:

[IPKernelApp] ERROR | Exception in message handler:
Traceback (most recent call last):
  File "c:\users\tomer\appdata\local\programs\python\python39\lib\site-packages\ipykernel\kernelbase.py", line 265, in dispatch_shell
    yield gen.maybe_future(handler(stream, idents, msg))
  File "c:\users\tomer\appdata\local\programs\python\python39\lib\site-packages\tornado\gen.py", line 762, in run
    value = future.result()
  File "c:\users\tomer\appdata\local\programs\python\python39\lib\site-packages\tornado\gen.py", line 234, in wrapper
    yielded = ctx_run(next, result)
  File "c:\users\tomer\appdata\local\programs\python\python39\lib\site-packages\ipykernel\kernelbase.py", line 580, in complete_request
    matches = yield gen.maybe_future(self.do_complete(code, cursor_pos))
  File "c:\users\tomer\appdata\local\programs\python\python39\lib\site-packages\ipykernel\ipkernel.py", line 356, in do_complete
    return self._experimental_do_complete(code, cursor_pos)
  File "c:\users\tomer\appdata\local\programs\python\python39\lib\site-packages\ipykernel\ipkernel.py", line 381, in _experimental_do_complete
    completions = list(_rectify_completions(code, raw_completions))
  File "c:\users\tomer\appdata\local\programs\python\python39\lib\site-packages\IPython\core\completer.py", line 484, in rectify_completions
    completions = list(completions)
  File "c:\users\tomer\appdata\local\programs\python\python39\lib\site-packages\IPython\core\completer.py", line 1818, in completions
    for c in self._completions(text, offset, _timeout=self.jedi_compute_type_timeout/1000):
  File "c:\users\tomer\appdata\local\programs\python\python39\lib\site-packages\IPython\core\completer.py", line 1861, in _completions
    matched_text, matches, matches_origin, jedi_matches = self._complete(
  File "c:\users\tomer\appdata\local\programs\python\python39\lib\site-packages\IPython\core\completer.py", line 2029, in _complete
    completions = self._jedi_matches(
  File "c:\users\tomer\appdata\local\programs\python\python39\lib\site-packages\IPython\core\completer.py", line 1373, in _jedi_matches
    interpreter = jedi.Interpreter(
  File "c:\users\tomer\appdata\local\programs\python\python39\lib\site-packages\jedi\api\__init__.py", line 725, in __init__
    super().__init__(code, environment=environment,
TypeError: __init__() got an unexpected keyword argument 'column'

如果有人能帮我解决这个问题,我会很高兴

【问题讨论】:

readline - TAB completion does not work in Jupyter Notebook but fine in iPython terminal - Stack Overflow 的可能重复项。 不,这不是您链接的问题的重复,因为该问题是关于在 IPython 中完成工作而不是在笔记本中。绝地的最新升级打破了所有 IPython 的完成,并且对一个 5 年前关于不同问题的问题的回答在这里具有误导性。 【参考方案1】:

前段时间,在我的机器上使用虚拟环境进行本地工作时,我在 Jupyterlab 上遇到了同样的问题。

这是 Jedi 加载完成速度太慢(或者更确切地说是永远等待)的问题,对我有用的是在笔记本顶部添加以下行(例如,您通常在其中进行导入):

# Jedi not working
%config Completer.use_jedi = False

这应该可以解决问题。

【讨论】:

这也适用于 jupyter notebook。 Official documentation(还包括如何使其永久化的信息)。另见***.com/questions/65321798/…【参考方案2】:

@techno1731 的解决方案不是最理想的,因为它只是禁用绝地而不是解决根本问题。

最新的 jedi (0.18) 版本与 IPython 7.19 不兼容,请参阅this discussion。 IPython:7.20(2020 年 2 月 1 日发布)和 8.0(尚未发布)具有兼容性修复。

此时正确的解决方法是升级IPython:

pip install -U "ipython>=7.20"

以后您可以在删除特定于您的安装的所有路径片段后搜索引用的最后两行,这是搜索:

     super().__init__(code, environment=environment,
TypeError: __init__() got an unexpected keyword argument 'column'

这将在今天的前两个 Google 结果中为您提供 GitHub 上的相关问题。

注意:这是我对Giant IPKernelApp Error Using Hydrogen in Atom 问题的回答的副本,考虑到氢/原子设置,它确实看起来不相关。我现在将投票结束关于该主题的所有其他问题,作为此问题的重复。

【讨论】:

jedi 0.18.0 和 ipython 7.26.0 出现同样的错误。按照***.com/a/65513532/1333610 中的建议降级到 jedi 0.17.2 有效。 如果您在使用较新的 IPython 时遇到此错误(这会很奇怪),您应该填写错误报告,而不是降级并希望其他人会这样做。默默地降级开源项目对每个人都是一种伤害(社区因为他们无法解决他们不知道的问题,而您自己则因为您将系统暴露在新版本中已修补的安全问题中)。【参考方案3】:

在您的环境中完全卸载您的 jupyter。然后,使用 conda 安装 jupyter notebook,让 conda 为你解析依赖。

第 1 步:完全卸载 jupyter。

python3 -m pip uninstall -y jupyter jupyter_core jupyter-client jupyter-console jupyterlab_pygments notebook qtconsole nbconvert nbformat

第 2 步:使用 conda 安装 jupyter notebook。

conda install -c conda-forge notebook 
conda install -c conda-forge nb_conda_kernels

重新启动您的笔记本。

【讨论】:

【参考方案4】:

我使用的是以前版本的绝地:

pip install jedi==0.17

这对我有用。

【讨论】:

以上是关于IPython(jupyter)中的完成现在可以工作(意外的关键字参数'column')的主要内容,如果未能解决你的问题,请参考以下文章

如何安装ipython notebook

IPython Jupyter 中的 Julia 并行计算

是否可以在 IPython /JuPyter Notebook 中显示 OpenCV 视频?

jupyter notebook安装与配置

如何腌制或存储 Jupyter (IPython) 笔记本会话以供以后使用

jupyter笔记本中的Ipython错误,没有堆栈跟踪