Python 3.6.8 - Jedi - ImportError:无法导入名称“traverse_parents”

jwa*_*wav 1 python importerror python-3.x jedi-vim

<TL;DR>

import jedi在 python 3.6.8 中运行时,我收到以下导入错误(完整回溯见帖子末尾):

...
from jedi.common import traverse_parents
ImportError: cannot import name 'traverse_parents'
Run Code Online (Sandbox Code Playgroud)

</TL;DR>

我登记了~/.local/lib/python3.6/site-packages/jedi/common.py:有一个函数叫做traverse_parents好的,所以肯定有一些巫术在起作用。我不是第一次遇到那些“未定义名称”问题,但我对这个问题的想法已经不多了。

已经尝试过:

  • 卸载、重新安装、升级 pip3 的“绝地”包
  • 对于名称中带有“jedi”的其他几个包,几乎是相同的爵士乐
  • 将 pip3 升级到 20.2.1 并重做相同的重新安装程序
  • 为 python2 安装绝地,因为为什么不(嘿,它在 python2 中工作正常,但谁在乎)
  • 还尝试从 apt-get 安装 python-jedi(后来我删除了它)
  • 对古代巴比伦恶魔的咒语(无济于事,他们周日不工作)

关于我如何修复它的模糊线索:

  • 从 github 获取最新版本的 jedi 并以某种方式安装它而不会弄乱(机会很大)
  • 卸载绝地并从 Neovim 中重新安装它(嘿,这可能会达到上一点)

我已经在网上搜索了这个问题的答案,但一无所获。有没有人经历过类似的事情并设法解决它?

欢迎任何建议。


完整的追溯:

Error detected while processing function provider#python3#Call:
line   18:                                                                                                                             
Error invoking 'python_execute' on channel 5 (python3-script-host):
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/vee/.local/lib/python3.6/site-packages/jedi/__init__.py", line 32, in <module>
    from jedi.api import Script, Interpreter, set_debug_funcion, \
  File "/home/vee/.local/lib/python3.6/site-packages/jedi/api/__init__.py", line 24, in <module>
    from jedi.api import classes
  File "/home/vee/.local/lib/python3.6/site-packages/jedi/api/classes.py", line 26, in <module>
    from jedi.inference import imports
  File "/home/vee/.local/lib/python3.6/site-packages/jedi/inference/__init__.py", line 70, in <module>
    from jedi.inference import imports
  File "/home/vee/.local/lib/python3.6/site-packages/jedi/inference/imports.py", line 24, in <module>
    from jedi.inference import sys_path
  File "/home/vee/.local/lib/python3.6/site-packages/jedi/inference/sys_path.py", line 8, in <module>
    from jedi.common import traverse_parents
ImportError: cannot import name 'traverse_parents'
Run Code Online (Sandbox Code Playgroud)

jwa*_*wav 6

修复它: 我使用以下命令通过 pip 重新安装了最新版本的绝地武士:

pip3 install -e git://github.com/davidhalter/jedi.git#egg=jedi

现在,该命令import jedi不会产生任何异常,并且在 Neovim 中似乎可以正常工作。

安装的默认版本pip3 install jedi生成导入错误的原因超出了我的猜测。也许这个版本本身有问题,也许是我的python环境的一些怪癖......

编辑:根据 David Halter 在下面的评论中的说法,这似乎是一个 pip 错误

反正。如果您遇到与我相同的问题,请尝试此修复程序。

  • 这是正确的问题:https://github.com/davidhalter/jedi/issues/1625 TL;DR:这可能是 pip 中的错误。这绝对不是 Jedi 的错,因为 Jedi 不提供 pyc 文件。 (2认同)