所以我在Windows 10上有一个非常相似的问题,但使用64位vim和python。
TL; DR
在我的情况下,该问题与YouCompleteMe没有关系。假设YCM符合python3。要使python27对VIM完全不可见,是可以帮助我解决问题的方法。
我已经安装TortoiseHg了一个python27.dll文件,其存储库位于中Path,这意味着vim可以看到该文件。要使其不可见,只需从以下位置删除TortoiseHg存储库Path(通常,任何包含python27.dll且路径在中的非python程序Path。通过where python27.dll在Windows控制台中进行操作,您都可以找到它们。)
C:\Windows\System32vim中也可以看到另一个python27.dll 。要使其不可见,请将其移至C:\Python27。并C:\Python27从中删除Path。
保持%PYTHONPATH%不变。确保Python 3.5存储库位于中Path。
我的系统
赢得10个专业版64位。
从每晚vim Windows构建站点下载的Vim 8.0.0045 64位巨大功能(+ dyn / python + dyn / python3)。
YouCompleteMe符合python 3.5.2 64位
Python 3.5.2 64位
Python 2.7.12 64位
%PYTHONHOME%设置为python 3安装文件夹,并包含在中
Path。
我的问题
如下所示,启动vim时会检测到错误。
消息是
Errordetectedwhileprocessing function youcompleteme#Enable[5]..124_SetUpPython:line39:E887:Sorry,this commandisdisabled,thePython's site module could not be loaded.
诊断程序
无论:echo has('python')和:echo has('python3')输出1.但是,当我这样做:py print 'test',VIM使我有同样E887的错误信息。
然后,我完全卸载了Python 2.7.12,但:echo has('python')仍然输出1并:py print 'test'仍然给出E887错误!同时:py3 print('test')始终可以正常工作并按预期输出测试。
为了确保它不是YouCompleteMe的问题,我通过启动了vim gvim -u NONE。打印测试给出相同的错误信息。因此问题出在vim本身,它无法执行与python 2.7.x站点模块相关的人员。
有人建议安装Python 2.7.9,但这对我不起作用。也许此解决方案仅适用于32位python 2.7。我没有测试,所以无法确认。
为什么发生所有这些情况:
首先,通过执行此操作,where python27.dll我在TortoiseHG存储库下找到了另一个python27.dll文件。这就是为什么:echo has('python')我卸载Python 2.7.12之后仍然输出1的原因。
然后,简单来说,:has('python')如果同时满足两个条件,则命令输出1:
Vim使用+ dyn / python功能进行编译(执行时分别使用+ dyn / python3 :has('python3'))
在您的路径中找到python27.dll文件。(分别是python35.dll。请参阅:help-python-dynamic和:help has-python获得更多信息。)但是它不做进一步检查;这就是为什么has-pythoncheck给出1但仍然检测到错误的原因。
Python 2.7.12不会自动设置%PYTHONPATH%,而Python 3.5.2会在Windows starup(如果在中找到python可执行文件)将此值设置为\Lib和
。在我仅安装python 3.5.2且vim找到TortoiseHg的python27.dll的情况下,当我运行时,vim将搜索python 2.7站点模块,但在Python 3.5的中。这就是引发错误E887的原因。因此,如果我们明确设置指向python 2.7,则E887错误将消失!\Lib\site-packagesPath:py print 'test'%PYTHONPATH%%PYTHONPATH%
解
参见开头的TL:DR部分。
结论
您曾经拥有两个版本的python,然后卸载了一个。您可能会高兴地认为这很干净,但是vim告诉您他找到了已删除的python,您也感到惊讶,我也是如此。那是因为通常系统中仍然存在一些神秘的python dll,不幸的是vim可以检测到它。因此,无论您是否在硬盘驱动器上保留其他版本的python,请确保vim完全看不到它。
可以在运行时由同一个实例vim调用两个版本的python的事实。真正的问题是两个版本的python共享ONE PYTHONPATH。如果PYTHONPATH与python版本不匹配,则python找不到正确的站点软件包,并使vim抱怨。这使我们大多数人认为这是一个vim问题。但不是。