如何在Windows上使用Python插件?


9

我已经安装了Windows 7 64位,并安装了python 2.7.11和python 3.5.1(均为32位),并且我已经用python / dyn和python3 / dyn编译了vim,但是我一直收到以下错误消息:

:py print "hello"
E887: Sorry, this command is disabled, the Python's site module could not be loaded

但是,以下所有工作都很好:

C:\python27\python -c "import site;"

:py3 print("hello")

这是我的vim版本信息:

VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jan 29 2016 11:58:41)
MS-Windows 32-bit console version
Included patches: 1-1194
Compiled by afontaine@PHOENIX
Huge version without GUI.  Features included (+) or not (-):
+acl                +eval               -mouseshape         +tag_old_static
+arabic             +ex_extra           +multi_byte_ime/dyn -tag_any_white
+autocmd            +extra_search       +multi_lang         -tcl
-balloon_eval       +farsi              -mzscheme           -tgetent
-browse             +file_in_path       -netbeans_intg      -termresponse
++builtin_terms     +find_in_path       +path_extra         +textobjects
+byte_offset        +float              -perl               +title
-channel            +folding            +persistent_undo    -toolbar
+cindent            -footer             -postscript         +user_commands
+clientserver       +gettext/dyn        +printer            +vertsplit
+clipboard          -hangul_input       +profile            +virtualedit
+cmdline_compl      +iconv/dyn          +python/dyn         +visual
+cmdline_hist       +insert_expand      +python3/dyn        +visualextra
+cmdline_info       +jumplist           +quickfix           +viminfo
+comments           +keymap             +reltime            +vreplace
+conceal            +langmap            +rightleft          +wildignore
+cryptv             +libcall            -ruby               +wildmenu
+cscope             +linebreak          +scrollbind         +windows
+cursorbind         +lispindent         +signs              +writebackup
+cursorshape        +listcmds           +smartindent        -xfontset
+dialog_con         +localmap           -sniff              -xim
+diff               -lua                +startuptime        -xterm_save
+digraphs           +menu               +statusline         -xpm_w32
-dnd                +mksession          -sun_workshop       
-ebcdic             +modify_fname       +syntax             
+emacs_tags         +mouse              +tag_binary
Compilation: gcc -Iproto -DWIN32 -DWINVER=0x0500 -D_WIN32_WINNT=0x0500 -DHAVE_PATHDEF -DFEAT_HUGE -DHAVE_GETTEXT -DHAVE_LOCALE_H -DDYNAMIC_GETTEXT -DFEAT_CSCOPE -DFEAT_NETBEANS_INTG -DFEAT_CHANNEL -DFEAT_GUI_W32 -DFEAT_CLIPBOARD -DFEAT_MBYTE -DFEAT_MBYTE_IME -DDYNAMIC_IME -DDYNAMIC_ICONV -pipe -w -march=i386 -Wall -DFEAT_PYTHON  -DDYNAMIC_PYTHON -DDYNAMIC_PYTHON_DLL="python27.dll" -DFEAT_PYTHON3  -DDYNAMIC_PYTHON3 -DDYNAMIC_PYTHON3_DLL="python35.dll" -DFEAT_XPM_W32 -I xpm/x86/include -I xpm/x86/../include -O3 -fomit-frame-pointer -freg-struct-return -s
Linking: gcc -Iproto -DWIN32 -DWINVER=0x0500 -D_WIN32_WINNT=0x0500 -DHAVE_PATHDEF -DFEAT_HUGE -DHAVE_GETTEXT -DHAVE_LOCALE_H -DDYNAMIC_GETTEXT -DFEAT_CSCOPE -DFEAT_NETBEANS_INTG -DFEAT_CHANNEL -DFEAT_GUI_W32 -DFEAT_CLIPBOARD -DFEAT_MBYTE -DFEAT_MBYTE_IME -DDYNAMIC_IME -DDYNAMIC_ICONV -pipe -w -march=i386 -Wall -DFEAT_PYTHON  -DDYNAMIC_PYTHON -DDYNAMIC_PYTHON_DLL="python27.dll" -DFEAT_PYTHON3  -DDYNAMIC_PYTHON3 -DDYNAMIC_PYTHON3_DLL="python35.dll" -DFEAT_XPM_W32 -I xpm/x86/include -I xpm/x86/../include -O3 -fomit-frame-pointer -freg-struct-return -s -mwindows -o gvim.exe -lkernel32 -luser32 -lgdi32 -ladvapi32 -lcomdlg32 -lcomctl32 -lversion -lwsock32 -Lxpm/x86/lib -lXpm -lole32 -luuid      

where python27.dll输出C:\Windows\System32

我已经尝试过此Google网上论坛帖子中的建议,但无济于事。

我只想让YouCompleteMe成功运行。


:help python-dynamic...To use the Python interface the Python DLL must be in your search path. In a console window type "path" to see what directories are used.
Alex Kroll

在那里。:!where python27.dll返回C:\Windows\System32\python27.dll。还要注意,如果缺少该库,则会发生另一个错误:E370: Could not load library python27.dllE263: Sorry, this command is disabled, the Python library could not be loaded.
afontaine

啊 我知道了。:py3可以,但是:py不会吗?如果插件之一:py3在vim启动期间执行,则是可能的。见:he python-2-and-3用于解释如何蟒蛇/ DYN和python3 / DYN一起工作..
亚历克斯·克罗尔

看起来将2.7.11换成2.7.9确实成功了。虽然奇怪。
afontaine '16

Answers:


7

好的,显然状态是这样的:Windows上的VIM支持python 2.7.9,不支持2.7.11。它可能适用于2.7.10,但我没有对其进行测试。

即使我在Windows上使用对2.7.11DLL 的引用编译了VIM ,但当我尝试换2.7.112.7.9

我不确定我是否对进行了错误操作2.7.11,并且它确实可以工作,但是我没有时间弄清楚它。


3
对于2.7.11这是由蟒蛇错误引起的,可以工作围绕
基督教Brabandt

3

所以我在Windows 10上有一个非常相似的问题,但使用64位vim和python。

TL; DR

在我的情况下,该问题与YouCompleteMe没有关系。假设YCM符合python3。要使python27对VIM完全不可见,是可以帮助我解决问题的方法。

  1. 我已经安装TortoiseHg了一个python27.dll文件,其存储库位于中Path,这意味着vim可以看到该文件。要使其不可见,只需从以下位置删除TortoiseHg存储库Path(通常,任何包含python27.dll且路径在中的非python程序Path。通过where python27.dll在Windows控制台中进行操作,您都可以找到它们。)
  2. C:\Windows\System32vim中也可以看到另一个python27.dll 。要使其不可见,请将其移至C:\Python27。并C:\Python27从中删除Path
  3. 保持%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时会检测到错误。

Vim启动错误

消息是

Error detected while processing function youcompleteme#Enable[5]..<SNR>124_SetUpPython:
line 39:
E887: Sorry, this command is disabled, the Python'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。我没有测试,所以无法确认。

为什么发生所有这些情况:

  1. 首先,通过执行此操作,where python27.dll我在TortoiseHG存储库下找到了另一个python27.dll文件。这就是为什么:echo has('python')我卸载Python 2.7.12之后仍然输出1的原因。
  2. 然后,简单来说,:has('python')如果同时满足两个条件,则命令输出1:

    • Vim使用+ dyn / python功能进行编译(执行时分别使用+ dyn / python3 :has('python3')

    • 在您的路径中找到python27.dll文件。(分别是python35.dll。请参阅:help-python-dynamic:help has-python获得更多信息。)但是它不做进一步检查;这就是为什么has-pythoncheck给出1但仍然检测到错误的原因。

  3. Python 2.7.12不会自动设置%PYTHONPATH%,而Python 3.5.2会在Windows starup(如果在中找到python可执行文件)将此值设置为<where_python_found>\Lib和 。在我仅安装python 3.5.2且vim找到TortoiseHg的python27.dll的情况下,当我运行时,vim将搜索python 2.7站点模块,但在Python 3.5的中。这就是引发错误E887的原因。因此,如果我们明确设置指向python 2.7,则E887错误将消失<where_python_found>\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问题。但不是。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.