ฉันจะใช้ Python plugin บน Windows ได้อย่างไร


9

ฉันติดตั้ง Windows 7 64- บิตพร้อม python 2.7.11 และ python 3.5.1 (ทั้ง 32- บิต) และฉันได้คอมไพล์ vim ด้วย python / dyn และ python3 / dyn แต่ฉันได้รับข้อผิดพลาดต่อไปนี้:

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

อย่างไรก็ตามสิ่งต่อไปนี้ใช้ได้ดี:

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

และ

:py3 print("hello")

นี่คือข้อมูลเวอร์ชัน 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      

และwhere python27.dllเอาท์พุทC:\Windows\System32

ฉันได้ลองคำแนะนำจากโพสต์ของกลุ่ม google นี้แต่ก็ไม่มีประโยชน์

ฉันแค่อยากให้ YouCompleteMe ทำงานได้สำเร็จ


:help python-dynamicพูดว่า...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

มันอยู่ที่นั่น ผลตอบแทน:!where python27.dll C:\Windows\System32\python27.dllนอกจากนี้โปรดทราบว่าหากห้องสมุดหายไปจะมีข้อผิดพลาดเกิดขึ้น: E370: Could not load library python27.dllและE263: Sorry, this command is disabled, the Python library could not be loaded.
afontaine

อ่า ฉันเห็น. :py3ทำงานได้ แต่:pyจะไม่? เป็นไปได้ถ้าหนึ่งในปลั๊กอินทำงาน:py3ในระหว่างการเรียกใช้กลุ่ม ดู:he python-2-and-3เพื่ออธิบายวิธีที่ไพ ธ อน / dyn และ python3 / dyn ทำงานร่วมกันได้อย่างไร ..
Alex Kroll

ดูเหมือนว่าการสลับ 2.7.11 สำหรับ 2.7.9 ทำเคล็ดลับ แม้ว่าแปลก
afontaine

คำตอบ:


7

เอาล่ะเห็นได้ชัดว่ารัฐคือ: VIM บน Windows รองรับ python 2.7.9ไม่ใช่ 2.7.11มันอาจใช้งานได้2.7.10ฉันไม่ได้ทดสอบ

แม้ว่าฉันจะรวบรวม VIM บน Windows โดยมีการอ้างอิงถึง2.7.11DLL แต่ก็ใช้งานได้ทันทีเมื่อฉันลองเปลี่ยน2.7.11เป็น2.7.9

ฉันไม่แน่ใจว่าฉันทำอะไรผิดหรือเปล่า2.7.11และมันใช้งานได้จริง แต่ฉันไม่มีเวลาคิดออก


3
สำหรับ 2.7.11 นี้เกิดจากข้อผิดพลาดหลามที่สามารถทำงานรอบ
คริสเตียน Brabandt

3

ดังนั้นฉันจึงมีปัญหาคล้ายกันมากใน Windows 10 แต่สำหรับ 64 บิต vim และ python

TL; DR

ปัญหาไม่เกี่ยวข้องกับ YouCompleteMe ในกรณีของฉัน สมมติว่า YCM สอดคล้องกับ python 3 เพื่อให้ python27 มองไม่เห็นอย่างสมบูรณ์ต่อ VIMคือสิ่งที่ช่วยให้ฉันแก้ปัญหาได้

  1. ฉันได้ติดตั้งTortoiseHgซึ่งมีไฟล์ python27.dll และมีที่เก็บอยู่Pathซึ่งหมายความว่าสามารถมองเห็นเป็นกลุ่มได้ หากต้องการทำให้มองไม่เห็นเพียงแค่ลบที่เก็บ TortoiseHg ออกจากPath(โดยทั่วไปแล้วโปรแกรมที่ไม่ได้เป็นไพ ธ อนใด ๆ ที่มี python27.dll และมีพา ธ อยู่Pathด้วยโดยทำwhere python27.dllในคอนโซล Windows คุณจะพบทั้งหมด)
  2. python27.dll อื่นในC:\Windows\System32นอกจากนี้ยังสามารถมองเห็นเป็นกลุ่ม C:\Python27ที่จะทำให้มันยังมองไม่เห็นย้ายไป และลบจากC:\Python27Path
  3. ปล่อยให้%PYTHONPATH%ไม่มีการตั้งค่า ตรวจสอบให้แน่ใจหลาม 3.5 Pathที่เก็บอยู่ใน

ระบบของฉัน

  • รับรางวัล 10 pro 64 บิต
  • เป็นกลุ่ม 8.0.0045 คุณสมบัติขนาดใหญ่ 64 บิต (+ dyn / python + dyn / python3) ดาวน์โหลดจากvim windows สร้างเว็บไซต์ทุกคืน
  • YouCompleteMe เป็นไปตาม python 3.5.2 64 bit
  • Python 3.5.2 64 บิต
  • Python 2.7.12 64 บิต
  • %PYTHONHOME%ถูกตั้งไว้ที่โฟลเดอร์การติดตั้งหลาม 3 Pathและรวมอยู่ใน

ปัญหาของฉัน

ตรวจพบข้อผิดพลาดเมื่อเรียกใช้กลุ่มดังที่แสดงด้านล่าง

ข้อผิดพลาดในการเรียกใช้เป็นกลุ่ม

ข้อความต่างๆ

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.

การวินิจฉัย

ทั้งสอง:echo has('python')และ:echo has('python3')ผลลัพธ์ 1. แต่เมื่อฉันทำ:py print 'test', กลุ่มให้ข้อความผิดพลาด E887 เดียวกันกับฉัน

จากนั้นฉันถอนการติดตั้ง Python 2.7.12 ทั้งหมด แต่:echo has('python')ก็ยังส่งออก 1 และ:py print 'test'ยังคงให้ข้อผิดพลาด E887! ในขณะเดียวกัน:py3 print('test')ก็ใช้การทดสอบตกลงและผลลัพธ์ได้ตามที่คาดไว้

เพื่อให้แน่ใจว่าจะไม่เกิดปัญหาจาก YouCompleteMe gvim -u NONEผมเปิดตัวเป็นกลุ่มโดย การทดสอบการพิมพ์ให้ข้อความแสดงข้อผิดพลาดเดียวกัน ดังนั้นปัญหามาจากกลุ่มตัวเองซึ่งไม่สามารถทำเจ้าหน้าที่ที่เกี่ยวข้องกับโมดูลไซต์ python 2.7.x

บางคนแนะนำให้ติดตั้ง Python 2.7.9 แต่ใช้ไม่ได้สำหรับฉัน บางทีวิธีนี้ใช้ได้กับ 32 บิต python 2.7 เท่านั้น ฉันไม่ได้ทดสอบดังนั้นฉันไม่สามารถยืนยันได้

ทำไมสิ่งเหล่านี้เกิดขึ้น:

  1. ครั้งแรกโดยทำwhere python27.dllฉันพบภายใต้พื้นที่เก็บข้อมูล TortoiseHG มีไฟล์ python27.dll อื่น นั่นคือเหตุผลที่:echo has('python')ยังคงส่งออก 1 หลังจากถอนการติดตั้ง Python 2.7.12
  2. จากนั้นเพื่อให้ง่ายคำสั่ง:has('python')เอาต์พุต 1 หากตรงตามเงื่อนไขทั้งสอง:

    • เป็นกลุ่มที่รวบรวมด้วยคุณสมบัติ + dyn / python (ตามลำดับ + dyn / python3 เมื่อทำ:has('python3'))

    • พบไฟล์ python27.dll ใน Path ของคุณ (. ตามลำดับ python35.dll ดู:help-python-dynamicและ:help has-pythonสำหรับข้อมูลเพิ่มเติม.) แต่ก็ไม่ได้ทำการตรวจสอบต่อไป ; นั่นคือเหตุผลที่การhas-pythonตรวจสอบให้ 1 แต่ยังตรวจพบข้อผิดพลาด

  3. Python 2.7.12 ไม่ได้ตั้งค่าโดยอัตโนมัติ%PYTHONPATH%ในขณะที่ Python 3.5.2 ตั้งค่านี้เป็น<where_python_found>\Libและ <where_python_found>\Lib\site-packagesที่ Windows Starup หากพบว่าสามารถใช้งาน Python Pathได้ ในกรณีของฉันที่มีเพียงหลาม 3.5.2 การติดตั้งและ python27.dll TortoiseHg ถูกพบโดยกลุ่มเมื่อผมทำงาน:py print 'test', เสียงเรียกเข้าจะหาหลามโมดูล 2.7 เว็บไซต์ แต่ในหลาม %PYTHONPATH%3.5 นั่นเป็นเหตุผลที่โยน E887 ข้อผิดพลาด ดังนั้นหากเราตั้งค่า%PYTHONPATH%อย่างชัดเจนให้ชี้ไปที่ python 2.7 ข้อผิดพลาดE887จะหายไป !

สารละลาย

ดูส่วนเริ่มต้น TL: DR

ข้อสรุป

คุณเคยมี python ทั้งสองเวอร์ชันและคุณถอนการติดตั้ง คุณอาจจะคิดว่ามันสะอาด แต่มีความสุขบอกคุณว่าเขาพบงูหลามที่คุณลบไปแล้วคุณก็ประหลาดใจและฉันด้วย นั่นเป็นเพราะบ่อยครั้งที่ยังมีบาง python dll ลึกลับที่เหลืออยู่ในระบบของคุณและน่าเสียดายที่สามารถตรวจพบได้โดย vim ดังนั้นไม่ว่าคุณจะเก็บงูหลามรุ่นอื่นไว้ในฮาร์ดไดรฟ์ของคุณหรือไม่ก็ตาม

ความจริงที่ว่างูหลามทั้งสองเวอร์ชันสามารถเรียกใช้โดยกลุ่มอินสแตนซ์เดียวกันในเวลารันไทม์นั้นถูกต้อง ปัญหาที่แท้จริงคือหลามทั้งสองเวอร์ชันใช้ร่วมกันหนึ่ง PYTHONPATHตัว หากPYTHONPATHไม่ตรงกับรุ่นของงูหลาม, งูเหลือมล้มเหลวในการค้นหาแพคเกจเว็บไซต์ที่เหมาะสมและทำให้เป็นกลุ่มบ่น สิ่งนี้ทำให้คนส่วนใหญ่คิดว่ามันเป็นปัญหาที่เกิดขึ้น แต่ไม่มี.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.