Comment utiliser les plugins Python sous Windows?


9

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.dllsortiesC:\Windows\System32

J'ai essayé les conseils de ce message de groupe Google , mais en vain.

Je veux juste que YouCompleteMe fonctionne correctement.


:help python-dynamicdit...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

C'est là. :!where python27.dllretourne C:\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.dlletE263: Sorry, this command is disabled, the Python library could not be loaded.
afontaine

Ahh. Je vois. :py3fonctionne mais :pypas? Il est possible que l'un des plugins s'exécute :py3lors du lancement de vim. Voir :he python-2-and-3pour expliquer comment python / dyn et python3 / dyn fonctionnent ensemble ..
Alex Kroll

On dirait que le remplacement de 2.7.11 par 2.7.9 a fait l'affaire. Étrange cependant.
afontaine

Réponses:


7

Très bien, apparemment, l'état est le suivant: VIM sur Windows prend en charge python 2.7.9, non 2.7.11. Cela pourrait fonctionner avec 2.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.11DLL, cela a soudainement fonctionné lorsque j'ai essayé de permuter 2.7.11pour2.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.


3
Pour 2.7.11 cela est causé par bug python, qui peut être travaillé autour
Christian Brabandt

3

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.

  1. J'avais installé TortoiseHgqui a un fichier python27.dll et dont le référentiel se trouve Path, ce qui signifie qu'il est visible pour vim. Pour le rendre invisible, supprimez simplement le référentiel TortoiseHg de Path(Plus généralement, tout programme non python qui contient un python27.dll et dont le chemin est Path. En faisantwhere python27.dll dans la console Windows, vous les trouverez tous.)
  2. Un autre python27.dll dans C:\Windows\System32est également visible pour vim. Pour le rendre également invisible, déplacez-le vers C:\Python27. Et retirer C:\Python27de Path.
  3. Laissez %PYTHONPATH%inchangé. Assurez-vous que le référentiel Python 3.5 est dans le Path.

Mon système

  • Win 10 pro 64 bits.
  • Vim 8.0.0045 64 bits énormes fonctionnalités (+ dyn / python + dyn / python3) téléchargées à partir de la construction nocturne de Windows vim site de .
  • YouCompleteMe est conforme à python 3.5.2 64 bits
  • Python 3.5.2 64 bits
  • Python 2.7.12 64 bits
  • %PYTHONHOME%est défini sur le dossier d'installation de python 3 et inclus dans Path.

Mon problème

Des erreurs sont détectées au lancement de vim, comme illustré ci-dessous.

Erreurs de lancement de Vim

Les messages sont

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.

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:

  1. Tout d'abord, ce faisant, where python27.dllj'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.
  2. 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-dynamicet :help has-pythonpour plus d'informations.) Mais il ne vérifie pas davantage ; c'est pourquoi has-pythoncheck donne 1 mais des erreurs sont toujours détectées.

  3. 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>\Libet <where_python_found>\Lib\site-packagesau démarrage de Windows s'il trouve un exécutable python dans Path. 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 . Si PYTHONPATHne 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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.