Як використовувати плагіни Python для 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.
Алекс Кролл

Це там. :!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під час запуску vim. Дивіться :he python-2-and-3для пояснення, як python / 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 це спричинено помилкою python, над якою можна попрацювати
Крістіан Брабандт

3

Тому у мене була дуже схожа проблема в моєму Windows 10, але для 64-бітного vim та python.

TL; DR

Проблема не має нічого спільного з YouCompleteMe в моєму випадку. Припустимо, YCM відповідає python 3. Зробити python27 повністю невидимим для VIM - це те, що допомагає мені вирішити проблему.

  1. Я встановив TortoiseHg який має файл python27.dll і в якому знаходиться його сховище Path, а це означає, що його видно vim. Щоб зробити його непомітним, просто видаліть сховище TortoiseHg з Path(Загалом, будь-яка програма, яка не містить python, яка містить python27.dll і шлях якої знаходиться Path. Роблячи where python27.dllв консолі Windows, ви їх знайдете.)
  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), завантажені з нічного сайту для створення .
  • YouCompleteMe виконав 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.

Діагностика

І вихід, :echo has('python')і :echo has('python3')вихід 1. Але коли я це роблю :py print 'test', vim передає мені те саме повідомлення про помилку 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-бітного python 2.7. Я не тестував, тому не можу підтвердити.

Чому все це відбувається:

  1. По-перше, where python27.dllя знайшов у сховищі TortoiseHG ще один файл python27.dll. Ось чому :echo has('python')все-таки виводиться 1 після видалення Python 2.7.12.
  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в системі Windows, якщо він знайде виконаний в Python Path. У моєму випадку, коли встановлено лише python 3.5.2 та TortoiseHg's python27.dll, знайдений vim. Коли я запускаю :py print 'test', vim шукатиме модуль сайту python 2.7, але в Python 3.5 %PYTHONPATH%. Ось чому помилка E887 кидається. Отже, якщо ми встановлюємо %PYTHONPATH%явно в точку в Python 2.7, помилка E887 буде ЗНИКНУТЬ !

Рішення

Див. Початок TL: DR частина.

Висновок

Колись у вас була обидві версії python, і ви видалили її. Ви можете щасливо подумати, що це чисто, але Вім скаже, що він знаходить пітон, який ви видалили, ви здивовані і я. Це тому, що часто у вашій системі залишається якийсь загадковий dll python, і, на жаль, він може бути виявлений vim. Отже, незалежно від того, зберігаєте ви іншу версію python на своєму жорсткому диску, переконайтесь, що він vime невидимий.

Те, що обидві версії python можна викликати одним і тим же vim екземпляра під час виконання, - це все добре. Справжньою проблемою є обидві версії python акцій ONE PYTHONPATH . Якщо PYTHONPATHверсія python не відповідає, python не зможе знайти потрібний сайт-пакет і змусить vim скаржитися. Це змушує більшість із нас думати, що це проблема vim. Але не.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.