J'ai Windows 7 64 bits, avec python 2.7.11 et python 3.5.1 (les deux 32 bits) installés, et j'ai compilé vim avec python / dyn et python3 / dyn, mais je reçois toujours l'erreur suivante:
:py print "hello"
E887: Sorry, this command is disabled, the Python's site module could not be loaded
Cependant, les éléments suivants fonctionnent très bien:
C:\python27\python -c "import site;"
et
:py3 print("hello")
Voici mes informations de version 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
Et where python27.dll
sortiesC:\Windows\System32
J'ai essayé les conseils de ce message de groupe Google , mais en vain.
Je veux juste que YouCompleteMe fonctionne correctement.
microsoft-windows
vimscript-python
afontaine
la source
la source
:help python-dynamic
dit...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
retourneC:\Windows\System32\python27.dll
. Notez également que si la bibliothèque est manquante, une erreur différente se produit:E370: Could not load library python27.dll
etE263: Sorry, this command is disabled, the Python library could not be loaded.
:py3
fonctionne mais:py
pas? Il est possible que l'un des plugins s'exécute:py3
lors du lancement de vim. Voir:he python-2-and-3
pour expliquer comment python / dyn et python3 / dyn fonctionnent ensemble ..Réponses:
Très bien, apparemment, l'état est le suivant: VIM sur Windows prend en charge python
2.7.9
, non2.7.11
. Cela pourrait fonctionner avec2.7.10
, je ne l'ai pas testé.Même si j'ai compilé VIM sur Windows avec une référence à la
2.7.11
DLL, cela a soudainement fonctionné lorsque j'ai essayé de permuter2.7.11
pour2.7.9
Je ne sais pas si j'ai fait quelque chose de mal
2.7.11
, et cela fonctionne, mais je n'ai pas le temps de le comprendre.la source
J'ai donc eu un problème très similaire sur mon Windows 10 mais pour vim 64 bits et python.
TL; DR
Le problème n'a rien à voir avec YouCompleteMe dans mon cas. Supposons que YCM soit conforme à python 3. Rendre python27 complètement invisible à VIM est ce qui m'aide à résoudre le problème.
TortoiseHg
qui a un fichier python27.dll et dont le référentiel se trouvePath
, ce qui signifie qu'il est visible pour vim. Pour le rendre invisible, supprimez simplement le référentiel TortoiseHg dePath
(Plus généralement, tout programme non python qui contient un python27.dll et dont le chemin estPath
. En faisantwhere python27.dll
dans la console Windows, vous les trouverez tous.)C:\Windows\System32
est également visible pour vim. Pour le rendre également invisible, déplacez-le versC:\Python27
. Et retirerC:\Python27
dePath
.%PYTHONPATH%
inchangé. Assurez-vous que le référentiel Python 3.5 est dans lePath
.Mon système
%PYTHONHOME%
est défini sur le dossier d'installation de python 3 et inclus dansPath
.Mon problème
Des erreurs sont détectées au lancement de vim, comme illustré ci-dessous.
Les messages sont
Diagnostique
Les deux
:echo has('python')
et la:echo has('python3')
sortie 1. Mais quand je le fais:py print 'test'
, vim me donne le même message d'erreur E887.Ensuite, je désinstalle complètement Python 2.7.12, mais génère
:echo has('python')
toujours 1 et:py print 'test'
donne toujours l'erreur E887! Pendant ce temps,:py3 print('test')
fonctionne toujours bien et teste la sortie comme prévu.Pour m'assurer que ce n'est pas un problème de YouCompleteMe, j'ai lancé vim par
gvim -u NONE
. Le test d'impression donne le même message d'erreur. Le problème vient donc de vim lui-même, ce qu'il ne fait pas avec le personnel lié au module de site python 2.7.x.Certaines personnes suggèrent d'installer Python 2.7.9, mais cela ne fonctionne pas pour moi. Peut-être que cette solution ne fonctionne que pour python 2.7 32 bits. Je n'ai pas testé donc je ne peux pas confirmer.
Pourquoi tout cela se produit:
where python27.dll
j'ai trouvé sous le référentiel TortoiseHG il y a un autre fichier python27.dll. C'est pourquoi:echo has('python')
il affiche toujours 1 après avoir désinstallé Python 2.7.12.Ensuite, pour faire simple, la
:has('python')
sortie de commande 1 si les deux conditions sont remplies:Vim est compilé avec la fonctionnalité + dyn / python (respectivement + dyn / python3 lors de l'exécution
:has('python3')
)Le fichier python27.dll se trouve dans votre chemin. (respectivement python35.dll. voir
:help-python-dynamic
et:help has-python
pour plus d'informations.) Mais il ne vérifie pas davantage ; c'est pourquoihas-python
check donne 1 mais des erreurs sont toujours détectées.Python 2.7.12 n'est pas défini automatiquement
%PYTHONPATH%
, tandis que Python 3.5.2 définit cette valeur sur<where_python_found>\Lib
et<where_python_found>\Lib\site-packages
au démarrage de Windows s'il trouve un exécutable python dansPath
. Dans mon cas où seul python 3.5.2 est installé et python27.dll de TortoiseHg est trouvé par vim, lorsque je lance:py print 'test'
, vim cherchera le module de site python 2.7 mais dans Python 3.5%PYTHONPATH%
. C'est pourquoi l'erreur E887 est levée. Par conséquent, si nous fixons%PYTHONPATH%
explicitement le point de Python 2.7, l'erreur E887 sera DISPARAÎTRE !Solution
Voir début TL: DR.
Conclusion
Vous aviez une fois les deux versions de python et vous en désinstallez une. Vous pensez peut-être heureusement que c'est propre mais vim vous dit qu'il trouve le python que vous avez supprimé, vous êtes étonné et moi aussi. C'est parce que souvent il reste encore une mystérieuse DLL en python dans votre système et malheureusement peut être détectée par vim. Donc, que vous conserviez ou non une autre version de python sur votre disque dur, assurez-vous qu'elle est complètement invisible pour vim.
Le fait que les deux versions de python puissent être invoquées par la même instance vim au moment de l'exécution est tout à fait correct. Le vrai problème est que les deux versions de python partagent ONE
PYTHONPATH
. SiPYTHONPATH
ne correspond pas à la version de python, python ne parvient pas à trouver le bon site-package et à se plaindre de vim. Cela fait penser à la plupart d'entre nous qu'il s'agit d'un problème de vim. Mais non.la source