Ubuntu 14.04上的Vim使用了一个有趣的python路径,python无法在其他模块中导入_io

Nob*_*lis 6 python linux vim

突然(可能是在更新软件包之后)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的问题?我在我的智慧结束,不知道如何解决这个问题.

Que*_*ker 1

YouCompleteMe 提供了一个选项g:ycm_server_python_interpreter来设置特定的解释器。

只需添加let g:ycm_server_python_interpreter = path/to/your/interpreter.vimrc喜欢的解释器的路径即可。