python - 在 Python 虚拟环境处于事件状态时启动 NeoVim 时出现 NameError

标签 python virtualenv neovim pyenv

当我在激活 virtualenv 的情况下启动 NeoVim 时,出现以下错误:

Error detected while processing function provider#python3#Call:
line   18:
Error invoking 'python_execute' on channel 3 (python3-script-host):
Traceback (most recent call last):
  File "<string>", line 6, in <module>
NameError: name 'execfile' is not defined
Press ENTER or type command to continue

这是我运行时看到的:checkhealth provider :

health#provider#check
========================================================================
## Clipboard (optional)
  - OK: Clipboard tool found: pbcopy

## Python 2 provider (optional)
  - INFO: pyenv: Path: /usr/local/Cellar/pyenv/1.2.16/libexec/pyenv
  - INFO: pyenv: $PYENV_ROOT is not set. Infer from `pyenv root`.
  - INFO: pyenv: Root: /Users/myname/.pyenv
  - INFO: Using: g:python_host_prog = "~/.pyenv/versions/2.7.16/envs/neovim-python2-venv/bin/python"
  - INFO: $VIRTUAL_ENV matches executable
  - INFO: Executable: /Users/myname/.pyenv/versions/2.7.16/envs/neovim-python2-venv/bin/python
  - INFO: Python version: 2.7.16
  - INFO: pynvim version: 0.4.1
  - OK: Latest pynvim is installed.

## Python 3 provider (optional)
  - INFO: pyenv: Path: /usr/local/Cellar/pyenv/1.2.16/libexec/pyenv
  - INFO: pyenv: $PYENV_ROOT is not set. Infer from `pyenv root`.
  - INFO: pyenv: Root: /Users/myname/.pyenv
  - INFO: Using: g:python3_host_prog = "~/.virtualenvs/neovim-python3-venv/bin/python3"
  - WARNING: $VIRTUAL_ENV exists but appears to be inactive. This could lead to unexpected results.
    - ADVICE:
      - If you are using Zsh, see: http://vi.stackexchange.com/a/7654
  - INFO: Executable: /Users/myname/.virtualenvs/neovim-python3-venv/bin/python3
  - INFO: Python version: 3.8.0
  - INFO: pynvim version: 0.4.1
  - OK: Latest pynvim is installed.

我不使用 Zsh,我使用 Bash。尝试使用 .bashrc 中链接答案中的片段没有改变这种情况。

在激活 virtualenv 时不启动 NeoVim 时,我没有收到错误消息。

删除所有 Vim 插件并没有消除错误。

我已经用同时使用 Python 2 和 Python 3 的 virtualenvs 尝试过这个。错误是一样的。

最佳答案

我有一个类似的问题已经解决了。
我正在使用 Vanilla vim .并基于 this线程,execfile()自python3以来已被删除。由于您的 python 解释器是 python3,这导致 vim/nvim 出现这种情况。
我查看了 ~/.vimrc并替换了一行 execfile(activate_this, dict(__file__=activate_this))具有以下内容:

with open(activate_this) as f:
    code = compile(f.read(), activate_this, 'exec')
    exec(code, dict(__file__=activate_this))

Vim 再次保持一致。

关于python - 在 Python 虚拟环境处于事件状态时启动 NeoVim 时出现 NameError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61973559/

相关文章:

vim - 如何在vim中的视觉模式下删除光标之前到行首的文本?

python - 如何从 python 中的字符串中删除不需要的字符?

python - 激活virtualenv时如何不显示路径

python - 为什么我不能在没有 sudo 的情况下使用 Python 和 pip 做一些事情?

c++ - 在 (Neo)vim 中调试 C++

vim - NeoVim 插件未安装。 (使用 vim 插件)

python - 在字母矩阵中查找国家名称

python - 从Python中的变量读取文件

python - 如何随机化查询集的顺序

python - 如何指定用于创建虚拟环境的 python 版本?