Автоматическое завершение Jupyter / предложения на вкладке не работают

#python #python-3.x #jupyter-notebook #ipython

#python #python-3.x #jupyter-ноутбук #ipython

Вопрос:

При работе с библиотеками, такими как nltk, автозаполнение вкладки было похоже на благословение, которое удобно перечисляло функции и атрибуты используемого модуля. Раньше это работало нормально несколько месяцев назад, но недавно я столкнулся с этой новой проблемой, когда автозаполнение не появлялось. Кажется, сначала они работают нормально, но через некоторое время индикатор активности ядра просто мигает при нажатии tab, и ничего не происходит. На стороне сервера jupyter появляется следующее сообщение:

 [IPKernelApp] ERROR | Exception in message handler:
Traceback (most recent call last):
  File "<the path>venvlibsite-packagesipykernelkernelbase.py", line 268, in dispatch_shell
    yield gen.maybe_future(handler(stream, idents, msg))
  File "<the path>venvlibsite-packagestornadogen.py", line 735, in run
    value = future.result()
  File "<the path>venvlibsite-packagestornadogen.py", line 209, in wrapper
    yielded = next(result)
  File "<the path>venvlibsite-packagesipykernelkernelbase.py", line 583, in complete_request
    matches = yield gen.maybe_future(self.do_complete(code, cursor_pos))
  File "<the path>venvlibsite-packagesipykernelipkernel.py", line 360, in do_complete
    return self._experimental_do_complete(code, cursor_pos)
  File "<the path>venvlibsite-packagesipykernelipkernel.py", line 385, in _experimental_do_complete
    completions = list(_rectify_completions(code, raw_completions))
  File "<the path>venvlibsite-packagesIPythoncorecompleter.py", line 484, in rectify_completions
    completions = list(completions)
  File "<the path>venvlibsite-packagesIPythoncorecompleter.py", line 1819, in completions
    if c and (c in seen):
  File "<the path>venvlibsite-packagesIPythoncorecompleter.py", line 1876, in _completions
    else:
  File "<the path>venvlibsite-packagesIPythoncorecompleter.py", line 991, in _make_signature
    return '(%s)'% ', '.join([f for f in (_formatparamchildren(p) for p in completion.params) if f])
  File "<the path>venvlibsite-packagesIPythoncorecompleter.py", line 991, in <listcomp>
    return '(%s)'% ', '.join([f for f in (_formatparamchildren(p) for p in completion.params) if f])
  File "<the path>venvlibsite-packagesIPythoncorecompleter.py", line 991, in <genexpr>
    return '(%s)'% ', '.join([f for f in (_formatparamchildren(p) for p in completion.params) if f])
  File "<the path>venvlibsite-packagesIPythoncorecompleter.py", line 968, in _formatparamchildren
    raise ValueError('Jedi function parameter description have change format.'
ValueError: Jedi function parameter description have change format.Expected "param ...", found 'def __subclasshook__'".
  

Хотя это не то, что серьезно затруднило бы процесс разработки, но было бы действительно полезно, если бы оно работало правильно.

В настоящее время я использую 64-разрядную версию python 3.8.6 (также сталкивался с той же проблемой в более старых версиях) и запускаю ноутбук в Microsoft Edge Chromium

Ответ №1:

Проблема здесь в Jedi.

Вы можете решить эту проблему с помощью магии jupyter. Просто добавьте следующее в верхней части своего блокнота:

 %config Completer.use_jedi = False
  

Другой способ справиться с этим — удалить кэш jedi в вашей системе (https://github.com/ipython/ipython/issues/12134#issuecomment-590952054 ):

Вам нужно очистить кэш jedi: просто удалите папку (linux)

 ~/.cache/jedi/
  

и все должно быть в порядке.

Для других ОС, пожалуйста, проверьте

https://jedi.readthedocs.io/en/latest/docs/settings.html#filesystem-cache

Комментарии:

1. Вы знаете, почему это происходит? Просто любопытно

2. Конечно, чтобы досадить нам до смерти и сделать нашу жизнь несчастной!