Eu tenho o Windows 7 de 64 bits, com o python 2.7.11 e o python 3.5.1 (ambos de 32 bits) instalados e compilei o vim com python / dyn e python3 / dyn, mas continuo recebendo o seguinte erro:
:py print "hello"
E887: Sorry, this command is disabled, the Python's site module could not be loaded
No entanto, todos os seguintes funcionam bem:
C:\python27\python -c "import site;"
e
:py3 print("hello")
Esta é a minha informação de versão do 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
E where python27.dll
saídasC:\Windows\System32
Eu tentei o conselho deste post do grupo do Google , mas sem sucesso.
Eu só quero que o YouCompleteMe seja executado com êxito.
microsoft-windows
vimscript-python
afontaine
fonte
fonte
:help python-dynamic
diz...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.
:!where python27.dll
retornaC:\Windows\System32\python27.dll
. Observe também que, se a biblioteca estiver ausente, ocorrerá um erro diferente:E370: Could not load library python27.dll
eE263: Sorry, this command is disabled, the Python library could not be loaded.
:py3
funciona mas:py
não vai? É possível se um dos plugins for executado:py3
durante o lançamento do vim. Veja:he python-2-and-3
para explicar como python / dyn e python3 / dyn trabalha em conjunto ..Respostas:
Tudo bem, aparentemente o estado é este: o VIM no Windows suporta python
2.7.9
, não2.7.11
. Pode funcionar2.7.10
, eu não testei.Embora eu tenha compilado o VIM no Windows com uma referência à
2.7.11
DLL, ele de repente funcionou quando tentei trocar2.7.11
por2.7.9
Não tenho certeza se fiz algo errado
2.7.11
, e realmente funciona, mas não tenho tempo para descobrir.fonte
Então, eu tive um problema muito semelhante no meu Windows 10, mas no vim e python de 64 bits.
TL; DR
O problema não tem nada a ver com YouCompleteMe no meu caso. Suponha que o YCM esteja em conformidade com o python 3. Tornar o python27 completamente invisível para o VIM é o que me ajuda a resolver o problema.
TortoiseHg
um arquivo python27.dll e cujo repositório estáPath
, o que significa que ele é visível no vim. Para torná-lo invisível, basta remover o repositório TortoiseHg dePath
(geralmente, qualquer programa não-python que contém um python27.dll e cujo caminho está localizadoPath
. Ao fazê-lowhere python27.dll
no console do Windows, você encontra todos eles).C:\Windows\System32
também é visível no vim. Para torná-lo invisível, mova-o paraC:\Python27
. E removerC:\Python27
dePath
.%PYTHONPATH%
definir. Verifique se o repositório Python 3.5 está no diretórioPath
.Meu sistema
%PYTHONHOME%
está definido para a pasta de instalação do python 3 e incluído noPath
.Meu problema
Os erros são detectados quando o vim é iniciado, como mostrado abaixo.
As mensagens são
Diagnóstico
Ambos
:echo has('python')
e:echo has('python3')
saída 1. Mas quando eu faço:py print 'test'
, o vim me dá a mesma mensagem de erro E887.Então eu desinstalo completamente o Python 2.7.12, mas
:echo has('python')
ainda gera 1 e:py print 'test'
ainda dá o erro E887! Enquanto isso,:py3 print('test')
funciona sempre bem e teste de saída conforme o esperado.Para garantir que não seja um problema do YouCompleteMe, iniciei o vim by
gvim -u NONE
. O teste de impressão fornece a mesma mensagem de erro. Portanto, o problema é do próprio vim, que falha ao executar a equipe relacionada ao módulo do site python 2.7.x.Algumas pessoas sugerem a instalação do Python 2.7.9, mas isso não funciona para mim. Talvez essa solução funcione apenas para o python de 32 bits 2.7. Eu não testei, então não posso confirmar.
Por que tudo isso acontece:
where python27.dll
encontrei no repositório TortoiseHG outro arquivo python27.dll. É por isso que:echo has('python')
ainda gera 1 depois de desinstalar o Python 2.7.12.Então, para simplificar, o comando
:has('python')
emitirá 1 se as duas condições forem atendidas:O Vim é compilado com o recurso + dyn / python (respectivamente + dyn / python3 ao fazê-lo
:has('python3')
)O arquivo python27.dll é encontrado no seu caminho. (respectivamente python35.dll. consulte
:help-python-dynamic
e:help has-python
para obter mais informações.) Mas isso não faz uma verificação adicional ; é por isso que ahas-python
verificação dá 1, mas ainda erros são detectados.O Python 2.7.12 não é definido automaticamente
%PYTHONPATH%
, enquanto o Python 3.5.2 define esse valor para<where_python_found>\Lib
e<where_python_found>\Lib\site-packages
na inicialização do Windows, se encontrar o executável emPath
. No meu caso, onde apenas o python 3.5.2 instalado e o python27.dll do TortoiseHg são encontrados pelo vim, quando eu corro:py print 'test'
, o vim procura o módulo do site python 2.7, mas no Python 3.5%PYTHONPATH%
. É por isso que o erro E887 é lançado. Conseqüentemente, se%PYTHONPATH%
definirmos explicitamente para apontar para python 2.7, o erro E887 será DESAPARECIDO !Solução
Veja a parte TL: DR inicial.
Conclusão
Você já teve a versão do python e desinstalou uma. Você pode felizmente achar que está limpo, mas o vim diz que ele encontra o python que você excluiu, você está surpreso e eu também. Isso ocorre porque muitas vezes ainda existem algumas dll python misteriosas no sistema e, infelizmente, podem ser detectadas pelo vim. Portanto, se você preserva outra versão do python no disco rígido ou não, verifique se ele é completamente invisível para o vim.
O fato de que ambas as versões do python podem ser invocadas pela mesma instância vim em tempo de execução está correto. O verdadeiro problema é a versão do python compartilha UM
PYTHONPATH
. SePYTHONPATH
não corresponder à versão python, o python falhará ao encontrar o pacote do site correto e fará com que o vim se queixe. Isso faz com que a maioria de nós pense que é um problema de vim. Mas não.fonte