Bagaimana cara menggunakan plugin Python di Windows?


9

Saya memiliki Windows 7 64-bit, dengan python 2.7.11 dan python 3.5.1 (keduanya 32-bit) diinstal, dan saya telah mengkompilasi vim dengan python / dyn dan python3 / dyn, tetapi saya tetap mendapatkan kesalahan berikut:

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

Namun, berikut ini semua berfungsi dengan baik:

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

dan

:py3 print("hello")

Ini adalah info versi vim saya:

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      

Dan where python27.dlloutputC:\Windows\System32

Saya sudah mencoba saran dari posting grup google ini , tetapi tidak berhasil.

Saya hanya ingin agar YouCompleteMe berjalan dengan sukses.


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

Itu disana. :!where python27.dllkembali C:\Windows\System32\python27.dll. Perhatikan juga bahwa jika perpustakaan hilang, kesalahan yang berbeda terjadi: E370: Could not load library python27.dlldanE263: Sorry, this command is disabled, the Python library could not be loaded.
afontaine

Ahh. Saya melihat. :py3bekerja tetapi :pytidak? Mungkin saja jika salah satu plugin dijalankan :py3saat peluncuran vim. Lihat :he python-2-and-3untuk menjelaskan bagaimana python / dyn dan python3 / dyn bekerja bersama ..
Alex Kroll

Sepertinya menukar 2.7.11 untuk 2.7.9 melakukan trik. Anehnya.
afontaine

Jawaban:


7

Baiklah, tampaknya keadaannya adalah ini: VIM pada Windows mendukung python 2.7.9, bukan 2.7.11. Mungkin berhasil 2.7.10, saya tidak mengujinya.

Meskipun saya dikompilasi VIM pada Windows dengan referensi ke 2.7.11DLL, tiba-tiba bekerja ketika saya mencoba menukar 2.7.11untuk2.7.9

Saya tidak yakin jika saya melakukan sesuatu yang salah 2.7.11, dan itu benar-benar berhasil, tetapi saya tidak punya waktu untuk mencari tahu.


3
Untuk 2.7.11 ini disebabkan oleh bug python, yang dapat dikerjakan
Christian Brabandt

3

Jadi saya punya masalah yang sangat mirip pada Windows 10 saya tetapi untuk 64 bit vim dan python.

TL; DR

Masalahnya tidak ada hubungannya dengan YouCompleteMe dalam kasus saya. Misalkan YCM dipenuhi dengan python 3. Untuk membuat python27 benar-benar tidak terlihat oleh VIM adalah apa yang membantu saya memecahkan masalah.

  1. Saya telah menginstal TortoiseHgyang memiliki file python27.dll dan yang memiliki repositori Path, yang berarti terlihat oleh vim. Untuk membuatnya tidak terlihat, cukup hapus repositori TortoiseHg dari Path(Secara umum, semua program non-python yang berisi python27.dll dan yang jalurnya masuk Path. Dengan melakukan where python27.dlldi konsol windows, Anda menemukan semuanya.)
  2. Python27.dll lain C:\Windows\System32juga terlihat vim. Untuk membuatnya juga tidak terlihat, Pindahkan ke C:\Python27. Dan hapus C:\Python27dari Path.
  3. Biarkan %PYTHONPATH%tidak disetel. Pastikan repositori Python 3.5 ada di dalam Path.

Sistem saya

  • Menangkan 10 pro 64 bit.
  • Vim 8.0.0045 64 bit fitur besar (+ dyn / python + dyn / python3) diunduh dari nightly vim windows build site.
  • YouCompleteMe memenuhi python 3.5.2 64 bit
  • Python 3.5.2 64 bit
  • Python 2.7.12 64 bit
  • %PYTHONHOME%diatur ke folder instalasi python 3 dan termasuk dalam Path.

Masalahku

Kesalahan terdeteksi ketika vim diluncurkan seperti yang ditunjukkan di bawah ini.

Kesalahan peluncuran Vim

Pesan adalah

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.

Diagnostik

Keduanya :echo has('python')dan :echo has('python3')keluaran 1. Tetapi ketika saya melakukannya :py print 'test', vim memberi saya pesan kesalahan E887 yang sama.

Kemudian saya benar-benar menghapus Python 2.7.12, tetapi :echo has('python')masih menampilkan 1 dan :py print 'test'masih memberikan E887 Error! Sementara itu :py3 print('test')berfungsi selalu OK dan tes output seperti yang diharapkan.

Untuk memastikan itu bukan masalah dari YouCompleteMe, saya meluncurkan vim by gvim -u NONE. Tes cetak memberikan pesan kesalahan yang sama. Jadi masalahnya adalah dari vim itu sendiri, yang gagal melakukan staf terkait dengan modul situs python 2.7.x.

Beberapa orang menyarankan untuk menginstal Python 2.7.9, tetapi itu tidak berhasil untuk saya. Mungkin solusi ini hanya berfungsi untuk 32 bit python 2.7. Saya tidak menguji jadi saya tidak bisa mengkonfirmasi.

Mengapa semua ini terjadi:

  1. Pertama, dengan melakukan where python27.dllsaya temukan di bawah repositori TortoiseHG ada file python27.dll lain. Itu sebabnya :echo has('python')masih menghasilkan 1 setelah saya menghapus Python 2.7.12.
  2. Kemudian, untuk membuatnya lebih sederhana, perintah :has('python')menghasilkan 1 jika kedua kondisi terpenuhi:

    • Vim dikompilasi dengan fitur + dyn / python (masing-masing + dyn / python3 saat melakukan :has('python3'))

    • File python27.dll ditemukan di Path Anda. (masing-masing python35.dll. lihat :help-python-dynamicdan :help has-pythonuntuk informasi lebih lanjut.) Tetapi tidak melakukan pemeriksaan lebih lanjut ; itu sebabnya has-pythoncek memberi 1 tetapi kesalahan masih terdeteksi.

  3. Python 2.7.12 tidak secara otomatis mengatur %PYTHONPATH%, sementara Python 3.5.2 mengatur nilai ini ke <where_python_found>\Libdan <where_python_found>\Lib\site-packagespada Windows starup jika menemukan python dieksekusi di Path. Dalam kasus saya di mana hanya python 3.5.2 diinstal dan python27.dll TortoiseHg ditemukan oleh vim, Ketika saya jalankan :py print 'test', vim akan mencari modul situs python 2.7 tetapi dalam Python 3.5 %PYTHONPATH%. Karena itulah Error E887 terlempar. Akibatnya, jika kita menetapkan %PYTHONPATH%secara eksplisit untuk menunjuk ke python 2.7, Kesalahan E887 akan hilang !

Larutan

Lihat mulai TL: bagian DR.

Kesimpulan

Anda pernah memiliki kedua versi python dan menghapusnya. Anda mungkin dengan senang hati berpikir itu bersih tetapi vim memberi tahu Anda bahwa dia menemukan python yang telah Anda hapus, Anda heran dan saya juga. Itu karena sering masih ada beberapa dll python misterius yang tersisa di sistem Anda dan sayangnya dapat dideteksi oleh vim. Jadi, Apakah Anda menyimpan versi python lain di hard drive Anda atau tidak, pastikan itu sama sekali tidak terlihat oleh vim.

Fakta bahwa kedua versi python dapat dipanggil oleh instance vim yang sama saat run time tidak apa-apa. Masalah sebenarnya adalah kedua versi saham python ONE PYTHONPATH . Jika PYTHONPATHtidak cocok dengan versi python, python gagal menemukan paket situs yang tepat dan membuat vim mengeluh. Ini membuat sebagian besar dari kita berpikir itu adalah masalah vim. Tapi tidak.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.