Tengo Windows 7 de 64 bits, con python 2.7.11 y python 3.5.1 (ambos de 32 bits) instalados, y he compilado vim con python / dyn y python3 / dyn, pero sigo recibiendo el siguiente error:
:py print "hello"
E887: Sorry, this command is disabled, the Python's site module could not be loaded
Sin embargo, lo siguiente funciona bien:
C:\python27\python -c "import site;"
y
:py3 print("hello")
Esta es la información de mi versión 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
Y where python27.dll
salidasC:\Windows\System32
He intentado los consejos de esta publicación grupal de Google , pero fue en vano.
Solo quiero que YouCompleteMe se ejecute con éxito.
microsoft-windows
vimscript-python
afontaine
fuente
fuente
:help python-dynamic
dice...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
vuelveC:\Windows\System32\python27.dll
. También tenga en cuenta que si falta la biblioteca, se produce un error diferente:E370: Could not load library python27.dll
yE263: Sorry, this command is disabled, the Python library could not be loaded.
:py3
funciona pero:py
no? Es posible si uno de los complementos se ejecuta:py3
durante el lanzamiento de vim. Vea:he python-2-and-3
para explicar cómo funcionan juntos python / dyn y python3 / dyn ..Respuestas:
De acuerdo, al parecer, el estado es la siguiente: VIM en Windows soportes pitón
2.7.9
, no2.7.11
. Podría funcionar2.7.10
, no lo probé.Aunque compilé VIM en Windows con una referencia a la
2.7.11
DLL, de repente funcionó cuando intenté cambiarlo2.7.11
por2.7.9
No estoy seguro de si hice algo mal
2.7.11
, y realmente funciona, pero no tengo tiempo para resolverlo.fuente
Así que tuve un problema muy similar en mi Windows 10 pero para vim y python de 64 bits.
TL; DR
El problema no tiene nada que ver con YouCompleteMe en mi caso. Supongamos que YCM cumple con python 3. Hacer que python27 sea completamente invisible para VIM es lo que me ayuda a resolver el problema.
TortoiseHg
que tiene un archivo python27.dll y cuyo repositorio se encuentraPath
, lo que significa que es visible para vim. Para hacerlo invisible, simplemente elimine el repositorio TortoiseHg dePath
(Más generalmente, cualquier programa que no sea de Python que contenga un python27.dll y cuya ruta esté dentroPath
. Al hacerlowhere python27.dll
en la consola de Windows, los encontrará todos).C:\Windows\System32
también es visible para vim. Para hacerlo también invisible, muévalo aC:\Python27
. Y eliminarC:\Python27
dePath
.%PYTHONPATH%
configurar. Asegúrese de que el repositorio Python 3.5 esté en elPath
.Mi sistema
%PYTHONHOME%
está configurado en la carpeta de instalación de python 3 e incluido enPath
.Mi problema
Los errores se detectan cuando se inicia vim como se muestra a continuación.
Los mensajes son
Diagnósticos
Ambos
:echo has('python')
y:echo has('python3')
salida 1. Pero cuando lo hago:py print 'test'
, vim me da el mismo mensaje de error E887.Luego desinstalo completamente Python 2.7.12, ¡pero
:echo has('python')
aún sale el 1 y:py print 'test'
aún da el error E887! Mientras tanto:py3 print('test')
funciona siempre bien y prueba de salida como se esperaba.Para garantizar que no sea un problema de YouCompleteMe, inicié vim by
gvim -u NONE
. La prueba de impresión muestra el mismo mensaje de error. Entonces, el problema es de vim, que no puede hacer el personal relacionado con el módulo de sitio python 2.7.x.Algunas personas sugieren instalar Python 2.7.9, pero no funciona para mí. Quizás esta solución solo funcione para Python 2.7 de 32 bits. No hice la prueba, así que no puedo confirmar.
Por qué suceden todos estos:
where python27.dll
, encontré debajo del repositorio TortoiseHG que hay otro archivo python27.dll. Es por eso que:echo has('python')
aún muestra 1 después de desinstalar Python 2.7.12.Luego, para decirlo de manera simple, el comando
:has('python')
genera 1 si se cumplen ambas condiciones:Vim se compila con la función + dyn / python (respectivamente + dyn / python3 cuando se hace
:has('python3')
)El archivo python27.dll se encuentra en su ruta. (respectivamente python35.dll. consulte
:help-python-dynamic
y:help has-python
para obtener más información). Pero no realiza más verificaciones ; es por eso quehas-python
check da 1 pero aún se detectan errores.Python 2.7.12 no se configura automáticamente
%PYTHONPATH%
, mientras que Python 3.5.2 establece este valor en<where_python_found>\Lib
y<where_python_found>\Lib\site-packages
en el estado de Windows si encuentra que Python es ejecutablePath
. En mi caso, donde vim solo encuentra python 3.5.2 instalado y python27.dll de TortoiseHg. Cuando ejecuto:py print 'test'
, vim buscará el módulo de sitio python 2.7 pero en Python 3.5%PYTHONPATH%
. Es por eso que se arroja el error E887. En consecuencia, si establecemos%PYTHONPATH%
explícitamente que apunte a python 2.7, ¡el error E887 DESAPARECERÁ !Solución
Ver comienzo TL: DR parte.
Conclusión
Una vez tuvo ambas versiones de python y desinstaló una. Puede que felizmente piense que está limpio, pero le digo que encuentra la pitón que ha eliminado, que usted está asombrado y yo también. Esto se debe a que a menudo todavía queda algún dll de python misterioso en su sistema y, desafortunadamente, vim puede detectarlo. Entonces, ya sea que conserve otra versión de python en su disco duro o no, asegúrese de que sea completamente invisible para vim.
El hecho de que ambas versiones de python puedan ser invocadas por la misma instancia vim en tiempo de ejecución está bien. El verdadero problema es que ambas versiones de Python comparten UNO
PYTHONPATH
. SiPYTHONPATH
no coincide con la versión de python, python no puede encontrar el paquete de sitio correcto y hace que vim se queje. Esto hace que la mayoría de nosotros piense que es un problema vim. Pero no.fuente