Python 虚拟环境处于活动状态时启动 NeoVim 时出现 NameError
NameError when starting NeoVim while Python virtual environment is active
当我在激活 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 上试过了。错误是一样的。
我相信您的 init.vim 行 g:python3_host_prog = "~/.virtualenvs/neovim-python3-venv/bin/python3"
之前有一些 python 代码,当您启动 nvim 时,这段代码试图在不知道要使用哪个解释器之前执行.
(至少我也有同样的问题打了半天)
因此只需将提到的行放在 python 代码之前。
在我的例子中,按照其他答案中的建议将 g:python3_host_prog = "~/.virtualenvs/neovim-python3-venv/bin/python3"
放在前面是行不通的。
相反,删除软件包并重新安装解决了问题。
我有一个类似的问题已经解决了。
我正在使用原版 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 再次保持一致。
当我在激活 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 上试过了。错误是一样的。
我相信您的 init.vim 行 g:python3_host_prog = "~/.virtualenvs/neovim-python3-venv/bin/python3"
之前有一些 python 代码,当您启动 nvim 时,这段代码试图在不知道要使用哪个解释器之前执行.
(至少我也有同样的问题打了半天)
因此只需将提到的行放在 python 代码之前。
在我的例子中,按照其他答案中的建议将 g:python3_host_prog = "~/.virtualenvs/neovim-python3-venv/bin/python3"
放在前面是行不通的。
相反,删除软件包并重新安装解决了问题。
我有一个类似的问题已经解决了。
我正在使用原版 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 再次保持一致。