WindowsでPythonプラグインを使用するにはどうすればよいですか?


9

python 2.7.11とpython 3.5.1(両方とも32ビット)がインストールされた64ビットのWindows 7を使用していて、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

私はこのグーグルグループの投稿からのアドバイスを試しましたが、役に立ちませんでした。

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の起動中にプラグインの1つが実行される可能性があります。参照してください:he python-2-and-3。..のpython / DYNとのpython3 / DYNが一緒にどのように動作するかを説明するために
アレックス・クロール

2.7.11を2.7.9に交換することでトリックができたようです。奇妙なことですが。
afontaine 2016

回答:


7

大丈夫、明らかに状態はこれです:Windows上のVIMは2.7.9、ではなくpythonをサポートしてい2.7.11ます。で動作する可能性がありますが2.7.10、テストしていません。

2.7.11DLLを参照してWindowsでVIMをコンパイルしましたが、スワップアウトしようとすると突然動作し2.7.11ました2.7.9

で何か問題があったかどうかはわかり2.7.11ませんが、実際には機能しますが、それを理解する時間はありません。


3
2.7.11の場合、これはpythonのバグが原因で発生し、回避
Christian Brabandt

3

したがって、Windows 10でも64ビットのvimとpythonで非常によく似た問題が発生しました。

TL; DR

私の場合、問題はYouCompleteMeとは関係ありません。YCMがpython 3に準拠しているとします。python27をVIMから完全に見えなくすることは、問題の解決に役立ちます。

  1. 私はTortoiseHgpython27.dllファイルがあり、そのリポジトリがにあるをインストールしました。これは、Pathvimから見えることを意味します。それは目に見えないようにするには、単にからTortoiseHgのリポジトリを削除Path(、より一般的には、パスであるpython27.dllを含む任意の非PythonプログラムをPath。これによりwhere python27.dllWindowsコンソールで、あなたはそれらのすべてを見つけます。)
  2. 別のpython27.dll C:\Windows\System32もvimに表示されます。これも非表示にするには、に移動しC:\Python27ます。C:\Python27から削除しPathます。
  3. %PYTHONPATH%未設定のままにします。Python 3.5リポジトリがにあることを確認してくださいPath

私のシステム

  • 勝利10プロ64ビット。
  • Vim 8.0.0045 64ビットの巨大な機能(+ dyn / python + dyn / python3)は、毎晩のvim Windowsビルドサイトからダウンロードされます。
  • YouCompleteMeはPython 3.5.2 64ビットに準拠
  • Python 3.5.2 64ビット
  • Python 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.

診断

両方とも1 :echo has('python'):echo has('python3')出力します。しかし、:py print 'test'そうすると、vimは同じE887エラーメッセージを表示します。

次に、Python 2.7.12を完全にアンインストールし:echo has('python')ますが、それでも1を出力し、:py print 'test'それでもE887エラーが発生します。その間、:py3 print('test')常に問題なく動作し、期待どおりにテストを出力します。

YouCompleteMeからの問題ではないことを確認するため、vimをで起動しましたgvim -u NONE。印刷テストでも同じエラーメッセージが表示されます。そのため、問題はvim自体にあり、Python 2.7.xサイトモジュールに関連するスタッフを実行できません。

一部の人はPython 2.7.9のインストールを提案しますが、私にはうまくいきません。たぶん、このソリューションは32ビットpython 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. Pythonの2.7.12は、自動的に設定されていない%PYTHONPATH%のPython 3.5.2は、この値を設定しながら、<where_python_found>\Libそして <where_python_found>\Lib\site-packagesそれがでPythonの実行可能ファイルを見つけた場合、WindowsのstarupでPath。python 3.5.2のみがインストールされていてTortoiseHgのpython27.dllがvimで見つかった私の場合、を実行すると:py print 'test'、vimはpython 2.7サイトモジュールを検索しますが、Python 3.5で検索します%PYTHONPATH%。そのため、エラーE887がスローされます。したがって、%PYTHONPATH%明示的にpython 2.7をポイントするように設定すると、E887エラーは表示されなくなります。

解決

最初のTL:DR部分を参照してください。

結論

あなたはかつて両方のバージョンのpythonを持っていて、一方をアンインストールしました。あなたは喜んでそれがきれいだと思うかもしれませんが、vimはあなたが削除したpythonを彼が見つけたと言ってくれます。これは、システムにいくつかの神秘的なpython dllが残っていることが多く、残念ながらvimで検出できるためです。したがって、ハードドライブに別のバージョンのpythonを保存するかどうかにかかわらず、vimから完全に見えないようにしてください。

Pythonの両方のバージョンを実行時に同じインスタンスvimから呼び出すことができるという事実は問題ありません。本当の問題は、Pythonの両方のバージョンがONEを 共有していることPYTHONPATHです。PYTHONPATHがpythonのバージョンと一致しない場合、pythonは適切なサイトパッケージを見つけられず、vimに文句を言います。これは、ほとんどの人がvimの問題だと思っています。しかし、いいえ。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.