Windows에서 Python 플러그인을 어떻게 사용합니까?


9

python 2.7.11 및 python 3.5.1 (32 비트 모두)이 설치된 Windows 7 64 비트가 있고 python / dyn 및 python3 / dyn으로 vim을 컴파일했지만 다음과 같은 오류가 계속 발생합니다.

: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.
알렉스 크롤

저기에있어. :!where python27.dll을 반환합니다 C:\Windows\System32\python27.dll. 또한 라이브러리가없는 경우, 다른 오류가 발생 참고 : E370: Could not load library python27.dllE263: Sorry, this command is disabled, the Python library could not be loaded.
afontaine

아 내가 참조. :py3작동하지만 :py그렇지 않습니까? :py3vim 실행 중에 플러그인 중 하나가 실행되면 가능합니다 . :he python-2-and-3python / dyn과 python3 / dyn이 함께 작동하는 방법을 설명 하십시오 .
Alex Kroll

2.7.9를 2.7.11로 교체하면 트릭을 수행 한 것 같습니다. 그래도 이상합니다.
afontaine

답변:


7

좋아, 분명히 상태는 이것입니다 : Windows의 VIM은 python을 지원 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이 파이썬의 버그로 인해, 즉 수 있습니다 해결할
기독교 Brabandt

3

그래서 Windows 10에서도 64 비트 vim 및 python과 비슷한 문제가 발생했습니다.

TL; DR

문제는 내 경우에는 YouCompleteMe와 관련이 없습니다. YCM이 python 3 준수한다고 가정합니다. python27을 VIM에 완전히 보이지 않게하는 것이 문제 해결에 도움이됩니다.

  1. TortoiseHgpython27.dll 파일이 있고 저장소가에 설치되어 Pathvim에 표시됩니다. 그것은 눈에 보이지 않는, 단지에서 TortoiseHg 저장소를 제거하려면 Path(A python27.dll이 들어 더 일반적으로, 비 - 파이썬 프로그램과 그 경로에 Path.함으로써 where python27.dll윈도우 콘솔에서, 당신은 그들 모두를 찾을 수 있습니다.)
  2. 다른 python27.dll C:\Windows\System32도 vim에 표시됩니다. 보이지 않게하려면로 이동하십시오 C:\Python27. C:\Python27에서 제거하십시오 Path.
  3. %PYTHONPATH%설정하지 않은 채로 두십시오 . Python 3.5 저장소가에 있는지 확인하십시오 Path.

내 시스템

  • 10 프로 64 비트 승리.
  • Vim 8.0.0045 야간 vim Windows 빌드 사이트 에서 다운로드 한 64 비트 기능 (+ dyn / python + dyn / python3) .
  • YouCompleteMe는 Python 3.5.2 64 비트를 준수했습니다.
  • 파이썬 3.5.2 64 비트
  • 파이썬 2.7.12 64 비트
  • %PYTHONHOME%python 3 설치 폴더로 설정되어 있으며에 포함되어 Path있습니다.

내 문제

아래와 같이 vim을 시작할 때 오류가 감지됩니다.

Vim 실행 오류

메시지는

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에서 문제가되지 않도록하기 위해 vim by를 시작했습니다 gvim -u NONE. 인쇄 테스트에서 동일한 오류 메시지가 나타납니다. 따라서 문제는 vim 자체에서 발생하며 python 2.7.x 사이트 모듈과 관련된 직원을 수행하지 못합니다.

어떤 사람들은 Python 2.7.9를 설치하도록 제안하지만 나에게는 효과가 없습니다. 어쩌면이 솔루션은 32 비트 파이썬 2.7에서만 작동합니다. 테스트하지 않았으므로 확인할 수 없습니다.

왜 이런 일이 발생합니까?

  1. 먼저 where python27.dllTortoiseHG 저장소에서 다른 python27.dll 파일을 찾았습니다. 그렇기 때문에 :echo has('python')Python 2.7.12를 제거한 후에도 여전히 1을 출력합니다.
  2. 간단히 말하면, :has('python')두 조건이 모두 충족되면 명령 출력 1이됩니다.

    • Vim은 + 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. vim에서 python 3.5.2 만 설치하고 TortoiseHg의 python27.dll을 찾은 :py print 'test'경우 vim은 python 2.7 사이트 모듈을 찾지 만 Python 3.5에서는 %PYTHONPATH%. 이것이 오류 E887이 발생하는 이유입니다. 결과적 %PYTHONPATH%으로 파이썬 2.7을 가리 키도록 명시 적으로 설정하면 E887 오류가 사라집니다 !

해결책

시작 TL : DR 부분을 참조하십시오.

결론

한 번에 두 버전의 Python을 모두 가지고 있었고 하나를 제거했습니다. 당신은 행복하다고 생각하지만 vim은 당신이 삭제 한 파이썬을 발견하고 놀랍고 나에게도 있다고 말합니다. 그것은 종종 시스템에 여전히 신비한 파이썬 dll이 남아 있기 때문에 불행히도 vim에 의해 감지 될 수 있기 때문입니다. 따라서 하드 드라이브에 다른 버전의 파이썬을 보존하는지 여부에 관계없이 vim에 완전히 보이지 않는지 확인하십시오.

두 버전의 파이썬이 런타임에 동일한 인스턴스 vim에 의해 호출 될 수 있다는 사실은 괜찮습니다. 진짜 문제는 두 버전의 파이썬이 하나를 공유한다는 것 PYTHONPATH입니다. 만약PYTHONPATH 파이썬 버전과 일치하지 않습니다, 파이썬은 바로 사이트 패키지를 찾아 불평 VIM 만들기 위해 실패합니다. 이것은 대부분의 사람들이 그것이 vim 문제라고 생각하게합니다. 하지만.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.