突然(可能是在更新软件包之后)vim停止使用YouCompleteMe并抛出:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python2.7/io.py", line 51, in <module>
import _io
ImportError: No module named _io
Run Code Online (Sandbox Code Playgroud)
(当我尝试从vim内部导入io时也会发生这种情况:python import io).
我在过去几个小时里一直在争夺这个问题,不知道问题是什么,重新安装了python和vim几次,无论是来源还是来自aptitude都没有区别.我注意到,与命令行相比,vim中的python使用了一个有趣的路径:
~$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys; print sys.path
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode']
>>>
Run Code Online (Sandbox Code Playgroud)
从vim:
:python import sys; print sys.path
['/usr/lib/python27.zip', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '
/usr/lib/python2.7/lib-dynload', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-pa
ckages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode', '_vim_path_']
Run Code Online (Sandbox Code Playgroud)
我没有使用virtualenv(我注意到有人因此virtualenv设置了这个问题).
还必须指出Python在命令行中运行得非常好,我可以io在启动解释器时愉快地导入,并且从源代码编译的vim 8和aptitude的vim-nox都会发生这种情况.
这是python如何看待其path内部vim的问题?我在我的智慧结束,不知道如何解决这个问题.
YouCompleteMe 提供了一个选项g:ycm_server_python_interpreter来设置特定的解释器。
只需添加let g:ycm_server_python_interpreter = path/to/your/interpreter您.vimrc喜欢的解释器的路径即可。