Windows'ta Python eklentilerini nasıl kullanabilirim?


9

Windows 7 64-bit, python 2.7.11 ve python 3.5.1 (her ikisi de 32-bit) yüklü ve vyt python / dyn ve python3 / dyn ile derledim, ancak aşağıdaki hatayı almaya devam ediyorum:

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

Ancak, aşağıdakilerin hepsi iyi çalışır:

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

ve

:py3 print("hello")

Bu benim vim sürüm bilgim:

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      

Ve where python27.dllçıktılarC:\Windows\System32

Ben bu google grup gönderiden tavsiye denedim , ama boşuna.

Sadece YouCompleteMe'nin başarıyla çalışmasını istiyorum.


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

Orada. :!where python27.dlldöner C:\Windows\System32\python27.dll. Ayrıca, kütüphane eksikse, farklı bir hata oluştuğunu unutmayın: E370: Could not load library python27.dllveE263: Sorry, this command is disabled, the Python library could not be loaded.
afontaine

Ahh. Anlıyorum. :py3çalışıyor ama :pyolmayacak mı? :py3Vim lansmanı sırasında eklentilerden birinin çalıştırılması mümkündür . :he python-2-and-3Python / dyn ve python3 / dyn'in birlikte nasıl çalıştığını açıklamak için bakın ..
Alex Kroll

2.7.9 için 2.7.11 takas gibi görünüyor hile yaptı. Yine de garip.
afontaine

Yanıtlar:


7

Tamam, görünüşe göre durum şu: Windows'taki VIM python'u destekliyor 2.7.9, değil 2.7.11. Çalışabilir 2.7.10, test etmedim.

Windows'da VIM'i 2.7.11DLL referansıyla derlememe rağmen , aniden takas etmeye çalıştığımda aniden çalıştı 2.7.11.2.7.9

Yanlış bir şey yapıp yapmadığımdan emin değilim 2.7.11ve aslında işe yarıyor, ama bunu anlayacak zamanım yok.


3
2.7.11 için bunun nedeni, etrafında
Christian Brabandt

3

Bu yüzden Windows 10'umda çok benzer bir sorun yaşadım ama 64 bit vim ve python için.

TL; DR

Sorunun benim durumumda YouCompleteMe ile ilgisi yok. Diyelim ki YCM, python 3 ile uyumludur. Python27'yi VIM için tamamen görünmez yapmak, sorunu çözmeme yardımcı olan şeydir.

  1. TortoiseHgBir python27.dll dosyası olan ve deposu içinde Patholan vim tarafından görülebilir anlamına gelir yüklü vardı . Görünmez yapmak için, sadece TortoiseHg deposunu kaldırın Path(Daha genel olarak, bir python27.dll içeren ve yolu bulunan herhangi bir python olmayan program Path. where python27.dllWindows konsolunda yaparak hepsini bulabilirsiniz.)
  2. Başka bir python27.dll C:\Windows\System32de vim tarafından görülebilir. Ayrıca görünmez yapmak için adresine taşıyın C:\Python27. Ve çıkarmak C:\Python27dan Path.
  3. %PYTHONPATH%Ayarsız bırakın . Python 3.5 deposunun Path.

Benim sistemim

  • 10 pro 64 bit kazan.
  • Vim 8.0.0045 64 bit büyük özellikler (+ dyn / python + dyn / python3) gece vim windows inşa sitesinden indirildi .
  • YouCompleteMe, python 3.5.2 64 bit ile uyumlu
  • Python 3.5.2 64 bit
  • Python 2.7.12 64 bit
  • %PYTHONHOME%python 3 kurulum klasörüne ayarlanmıştır ve içine dahil edilmiştir Path.

Benim sorunum

Vim aşağıda gösterildiği gibi başlatıldığında hatalar algılanır.

Vim başlatma hataları

Mesajlar

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.

Teşhis

Hem :echo has('python')ve :echo has('python3')ben ne zaman çıktı 1. Fakat :py print 'test', vim bana aynı E887 hata mesajı verir.

Sonra tamamen Python 2.7.12 kaldırmak, ama :echo has('python')yine de 1 çıktı ve :py print 'test'hala E887 Hata veriyor! Bu arada :py3 print('test')her zaman Tamam ve çıktı testi beklendiği gibi çalışır .

YouCompleteMe'den bir sorun olmadığından emin olmak için vim by'i başlattım gvim -u NONE. Yazdırma testi aynı hata iletisini verir. Yani sorun vim'in kendisinden kaynaklanıyor, bu da python 2.7.x site modülü ile ilgili personeli yapmıyor.

Bazı insanlar Python 2.7.9'u yüklemeyi önerir, ancak benim için çalışmıyor. Belki bu çözüm sadece 32 bit python 2.7 için çalışır. Test etmedim, bu yüzden onaylayamıyorum.

Tüm bunlar neden olur:

  1. İlk olarak, where python27.dllTortoiseHG deposu altında buldum başka bir python27.dll dosyası var. Bu yüzden :echo has('python')Python 2.7.12'yi kaldırdıktan sonra hala 1 çıktı.
  2. Daha sonra, basitleştirmek :has('python')gerekirse, her iki koşul da sağlanmışsa çıkış 1 komutu :

    • Vim + dyn / python özelliği ile derlenmiştir (yaparken + dyn / python3 :has('python3'))

    • Python27.dll dosyası Yolunuzda bulunur. (. Sırasıyla python35.dll bakın :help-python-dynamicve :help has-pythondaha fazla bilgi için bkz.) Fakat daha da çek yapmaz ; bu yüzden has-pythonkontrol 1 verir ancak yine de hatalar algılanır.

  3. Python 2.7.12 otomatik olarak ayarlanmazken %PYTHONPATH%, Python 3.5.2, python çalıştırılabilir buluyorsa bu değeri Windows başlangıcına <where_python_found>\Libve <where_python_found>\Lib\site-packagesWindows başlangıcına ayarlar Path. Sadece python 3.5.2 yüklü ve TortoiseHg's python27.dll vim tarafından bulunan benim durumumda, Ben çalıştırdığımda :py print 'test', vim python 2.7 site modülü arayacak ama Python 3.5 's %PYTHONPATH%. Bu yüzden Hata E887 atılır. Sonuç olarak, %PYTHONPATH%açıkça python 2.7'yi gösterecek şekilde ayarlarsak, E887 hatası DISAPPEAR !

Çözüm

Bkz. Başlangıç ​​TL: DR kısmı.

Sonuç

Bir zamanlar her iki python sürümüne sahiptiniz ve bir tane kaldırdınız. Mutlu bir şekilde temiz olduğunu düşünebilirsiniz ama vim sildiğiniz pitonu bulduğunu size söyler, hayret edersiniz ve ben de. Çünkü genellikle hala sisteminizde kalan bazı gizemli python dll var ve ne yazık ki vim tarafından tespit edilebilir. Bu nedenle, sabit sürücünüzde başka bir python sürümünü koruyup korumadığınızdan emin olun, vim için tamamen görünmez olduğundan emin olun.

Python'un her iki sürümünün de çalışma zamanında aynı örnek vim tarafından çağrılabilmesi gerçeği iyi. Asıl sorun python hisselerinin ONE versiyonudur PYTHONPATH. Eğer PYTHONPATHpiton sürümü eşleşmiyor, piton sağ site paketini bulup şikayet vim yapmak başarısız olur. Bu, çoğumuzun bir vim problemi olduğunu düşündürüyor. Ama hayır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.