У меня 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 работал успешно.
microsoft-windows
vimscript-python
afontaine
источник
источник
: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.
:py3
работает но:py
не будет? Это возможно, если один из плагинов:py3
запускается во время запуска vim. Смотрите:he python-2-and-3
для объяснения, как python / dyn и python3 / dyn работают вместе ..Ответы:
Хорошо, видимо, состояние таково: VIM в Windows поддерживает Python
2.7.9
, а не2.7.11
. Может сработать2.7.10
, я не проверял.Даже если я составил VIM на Windows , со ссылкой на
2.7.11
DLL, он внезапно работал , когда я попытался выгрузив2.7.11
для2.7.9
Я не уверен, сделал ли я что-то не так
2.7.11
, и это действительно работает, но у меня нет времени, чтобы понять это.источник
Так что у меня была очень похожая проблема на моей Windows 10, но для 64-битных vim и python.
TL; DR
Проблема не имеет ничего общего с YouCompleteMe в моем случае. Предположим, что YCM соответствует Python 3. Сделать Python27 полностью невидимым для VIM - вот что помогает мне решить проблему.
TortoiseHg
который имеет файл python27.dll и чей репозиторий находится вPath
, что означает, что он виден vim. Для того, чтобы сделать его невидимым, просто удалить TortoiseHg хранилища изPath
(более общо, любой непитоновской программы, содержащей python27.dll и чей путь вPath
. Поступаяwhere python27.dll
в консоли окна, вы найдете все из них.)C:\Windows\System32
также виден vim. Чтобы сделать его также невидимым, переместите его вC:\Python27
. И удалитьC:\Python27
изPath
.%PYTHONPATH%
неустановленным. Убедитесь, что репозиторий Python 3.5 находится вPath
.Моя система
%PYTHONHOME%
установлен в папку установки Python 3 и включен вPath
.Моя проблема
Ошибки обнаруживаются при запуске vim, как показано ниже.
Сообщения
диагностика
Оба
:echo has('python')
и:echo has('python3')
вывод 1. Но когда я это делаю:py print 'test'
, vim выдает мне то же сообщение об ошибке E887.Затем я полностью удаляю Python 2.7.12, но
:echo has('python')
все равно выдает 1 и:py print 'test'
все равно выдает E887 Error! Тем временем:py3 print('test')
работает всегда в норме и выходной тест как положено.Чтобы убедиться, что это не проблема с YouCompleteMe, я запустил vim by
gvim -u NONE
. Тест печати выдает то же сообщение об ошибке. Таким образом, проблема связана с самим vim, который не может выполнить персонал, связанный с модулем сайта python 2.7.x.Некоторые люди предлагают установить Python 2.7.9, но он не работает для меня. Возможно, это решение работает только для 32-битного Python 2.7. Я не проверял, поэтому я не могу подтвердить.
Почему все это происходит:
where python27.dll
я обнаружил в хранилище TortoiseHG еще один файл python27.dll. Вот почему:echo has('python')
все еще выводит 1 после того, как я удалил Python 2.7.12Затем, проще говоря, команда
:has('python')
выводит 1, если выполняются оба условия:Vim скомпилирован с функцией + dyn / python (соответственно + dyn / python3 при выполнении
:has('python3')
)Файл python27.dll находится в вашем пути. (соответственно python35.dll. см.
:help-python-dynamic
и:help has-python
для получения дополнительной информации.) Но это не делает дальнейшую проверку ; Вот почемуhas-python
проверка дает 1, но все равно ошибки обнаружены.Python 2.7.12 не устанавливается автоматически
%PYTHONPATH%
, в то время как Python 3.5.2 устанавливает это значение<where_python_found>\Lib
и<where_python_found>\Lib\site-packages
при запуске Windows, если находит исполняемый файл pythonPath
. В моем случае, когда только установленный 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, и вы удалили одну. Вы можете счастливо думать, что он чистый, но Вим говорит, что находит питона, которого вы удалили, вы удивлены и я тоже. Это потому, что часто в вашей системе все еще остается какая-то таинственная DLL-библиотека Python, и, к сожалению, vim может обнаружить ее. Итак, сохраняете ли вы другую версию python на своем жестком диске или нет, убедитесь, что он полностью невидим для vim.
Тот факт, что обе версии python могут быть вызваны одним и тем же экземпляром vim во время выполнения, просто в порядке. Реальная проблема заключается как версия питона акций ONE
PYTHONPATH
. ЕслиPYTHONPATH
не совпадает с версией Python, Python не может найти нужный сайт-пакет и заставить vim жаловаться. Это заставляет большинство из нас думать, что это бесполезная проблема. Но нет.источник