मैं विंडोज पर पायथन प्लगइन्स का उपयोग कैसे करूं?


9

मेरे पास विंडोज 7 64-बिट, अजगर 2.7.11 और अजगर 3.5.1 (दोनों 32-बिट) स्थापित है, और मैंने अजगर / डायन और पायथन 3 / डायन के साथ संकलन किया है, लेकिन निम्नलिखित त्रुटि प्राप्त कर रहा हूं:

: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 - 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.
एलेक्स क्रोल

यह वहाँ है। :!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समझाने के लिए देखें कि अजगर / डायन और अजगर 3 / डायन एक साथ कैसे काम करते हैं ..
एलेक्स क्रॉल

2.7.9 के लिए 2.7.11 बाहर स्वैपिंग की तरह दिखता है। हालांकि अजीब है।
afontaine

जवाबों:


7

ठीक है, जाहिरा तौर पर राज्य यह है: विंडोज पर वीआईएम अजगर का समर्थन करता है 2.7.9, नहीं 2.7.11। यह साथ काम कर सकता है 2.7.10, मैंने इसका परीक्षण नहीं किया।

भले ही मैंने 2.7.11DLL के संदर्भ के साथ Windows पर VIM संकलित किया , लेकिन जब मैंने इसके 2.7.11लिए स्वैपिंग की कोशिश की तो यह अचानक काम कर गया2.7.9

मुझे यकीन नहीं है कि अगर मैंने कुछ गलत किया 2.7.11, और यह वास्तव में काम करता है, लेकिन मेरे पास यह पता लगाने का समय नहीं है।


3
2.7.11 के लिए यह अजगर बग के कारण होता है, जिसके चारों ओर काम किया
क्रिश्चियन ब्रेबेंड

3

तो मुझे अपने विंडोज 10 पर बहुत ही समान समस्या थी लेकिन 64 बिट विम और पाइथन के लिए।

टी एल; डॉ

समस्या का मेरे मामले में YouCompleteMe से कोई लेना-देना नहीं है। मान लीजिए कि YCM को अजगर के साथ पालन किया गया है 3. VIM को पूरी तरह से अदृश्य करने के लिए python27 बनाने से मुझे समस्या को हल करने में मदद मिलती है।

  1. मैंने स्थापित किया था TortoiseHgजिसमें एक python27.dll फ़ाइल है और जिसकी रिपॉजिटरी में है Path, जिसका अर्थ है कि यह दृश्यमान है। इसे अदृश्य बनाने के लिए, बस TortoiseHg रिपॉजिटरी को हटा दें Path(अधिक सामान्यतः, किसी भी गैर-पायथन प्रोग्राम में जिसमें python27.dll शामिल है और जिसका पथ विंडोज कंसोल में Pathकर रहा where python27.dllहै, आप उन सभी को ढूंढते हैं।)
  2. एक और python27.dll C:\Windows\System32भी विम के लिए दृश्यमान है। इसे भी अदृश्य बनाने के लिए, इसे स्थानांतरित करें C:\Python27। और हटाने C:\Python27से Path
  3. %PYTHONPATH%परेशान छोड़ दो । सुनिश्चित करें कि पायथन 3.5 रिपॉजिटरी में है Path

मेरा सिस्टम

  • विन 10 प्रो 64 बिट।
  • Vim 8.0.0045 64 बिट विशाल सुविधाएँ (+ dyn / python + dyn / python3) नाइट विम विंडोज़ बिल्ड साइट से डाउनलोड की गई ।
  • YouCompleteMe अजगर 3.5.2 64 बिट के साथ पालन किया
  • पायथन 3.5.2 64 बिट
  • पायथन 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 त्रुटि संदेश देता है।

तब मैंने पायथन 2.7.12 की पूरी तरह से स्थापना रद्द कर दी, लेकिन :echo has('python')अभी भी 1 आउटपुट :py print 'test'देता है और अभी भी E887 त्रुटि देता है! इस बीच :py3 print('test')हमेशा उम्मीद के मुताबिक ओके और आउटपुट टेस्ट काम करता है।

यह सुनिश्चित करने के लिए कि आप YouCompleteMe से कोई समस्या नहीं है, मैंने vim को लॉन्च किया gvim -u NONE। प्रिंट परीक्षण एक ही त्रुटि संदेश देता है। तो समस्या खुद ही है, जो कि अजगर 2.7.x साइट मॉड्यूल से संबंधित कर्मचारियों को करने में विफल रहता है।

कुछ लोग पायथन 2.7.9 को स्थापित करने का सुझाव देते हैं, लेकिन यह मेरे लिए काम नहीं करता है। शायद यह समाधान केवल 32 बिट पायथन 2.7 के लिए काम करता है। मैंने परीक्षण नहीं किया इसलिए मैं पुष्टि नहीं कर सकता।

ये सब क्यों होता है:

  1. सबसे पहले, where python27.dllमैं TortoiseHG रिपॉजिटरी के तहत पाया एक और python27.dll फ़ाइल है। यही कारण है कि :echo has('python')मैं पायथन 2.7.12 की स्थापना रद्द करने के बाद भी 1 आउटपुट देता हूं।
  2. फिर, इसे सरल करने के लिए, कमांड :has('python')आउटपुट 1 यदि दोनों शर्तें पूरी होती हैं:

    • विम को + dyn / python फीचर के साथ संकलित किया जाता है (क्रमशः + dyn / python3 जब करते हैं :has('python3'))

    • आपके पथ में python27.dll फ़ाइल मिली है। (क्रमशः python35.dll देखें। :help-python-dynamicऔर :help has-pythonअधिक जानकारी के लिए।) लेकिन यह आगे की जाँच नहीं करता है ; यही कारण है कि has-pythonचेक 1 देता है लेकिन फिर भी त्रुटियों का पता लगाया जाता है।

  3. अजगर 2.7.12 स्वचालित रूप से निर्धारित नहीं करता है %PYTHONPATH%, जबकि अजगर 3.5.2 के लिए यह मान सेट <where_python_found>\Libऔर <where_python_found>\Lib\site-packagesविंडोज starup पर अगर यह में अजगर निष्पादन योग्य लगता है Path। मेरे मामले में जहां केवल अजगर 3.5.2 स्थापित है और कछुआ हैग का python27.dll vim द्वारा पाया जाता है, जब मैं चलता हूं :py print 'test', तो विम पायथन 2.7 साइट मॉड्यूल की तलाश करेगा लेकिन पायथन 3.5 के %PYTHONPATH%। इसलिए एरर E887 को फेंक दिया जाता है। नतीजतन, अगर हम %PYTHONPATH%2.7 को इंगित करने के लिए विस्फोटक रूप से सेट करते हैं, तो E887 त्रुटि गायब हो जाएगी !

समाधान

शुरुआत देखें TL: DR भाग।

निष्कर्ष

आपके पास एक बार अजगर का दोनों संस्करण था और आप एक की स्थापना रद्द करें। आप ख़ुशी से सोच सकते हैं कि यह साफ है लेकिन विम आपको बताता है कि वह आपके द्वारा हटाए गए अजगर को पाता है, आप हैरान हैं और मैं भी। ऐसा इसलिए है क्योंकि अक्सर आपके सिस्टम में अभी भी कुछ रहस्यमय अजगर शेष हैं और दुर्भाग्य से विम द्वारा पता लगाया जा सकता है। इसलिए, चाहे आप अपनी हार्ड ड्राइव पर अजगर के दूसरे संस्करण का संरक्षण करते हैं या नहीं, सुनिश्चित करें कि यह पूरी तरह से अदृश्य है।

तथ्य यह है कि अजगर के दोनों संस्करण को एक ही उदाहरण द्वारा चलाया जा सकता है जो कि रन टाइम के दौरान ही ठीक हो जाता है। असली समस्या अजगर शेयर वन के दोनों संस्करण है PYTHONPATH। यदि PYTHONPATHअजगर संस्करण से मेल नहीं खाता है, तो अजगर सही साइट-पैकेज खोजने और विम शिकायत करने में विफल रहता है। यह हम में से अधिकांश को लगता है कि यह एक समस्या है। लेकिन नहीं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.