Mam 64-bitowy system Windows 7 z zainstalowanym pythonem 2.7.11 i pythonem 3.5.1 (oba 32-bitowe) i skompilowałem vima z python / dyn i python3 / dyn, ale wciąż pojawia się następujący błąd:
:py print "hello"
E887: Sorry, this command is disabled, the Python's site module could not be loaded
Jednak następujące wszystko działa dobrze:
C:\python27\python -c "import site;"
i
:py3 print("hello")
To są informacje o mojej wersji vima:
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
I where python27.dll
wynikiC:\Windows\System32
Próbowałem porady z tego postu grupy google , ale bezskutecznie.
Chcę tylko, aby YouCompleteMe działał pomyślnie.
microsoft-windows
vimscript-python
afontaina
źródło
źródło
:help python-dynamic
mówi...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
zwracaC:\Windows\System32\python27.dll
. Zauważ też, że jeśli brakuje biblioteki, pojawia się inny błąd:E370: Could not load library python27.dll
iE263: Sorry, this command is disabled, the Python library could not be loaded.
:py3
działa, ale:py
nie będzie? Jest to możliwe, jeśli jedna z wtyczek zostanie uruchomiona:py3
podczas uruchamiania vima. Zobacz:he python-2-and-3
wyjaśnienie, w jaki sposób python / dyn i python3 / dyn działają razem.Odpowiedzi:
W porządku, najwyraźniej stan jest następujący: VIM w Windows obsługuje Python
2.7.9
, a nie2.7.11
. Może to działać2.7.10
, nie testowałem tego.Mimo że skompilowane VIM w systemie Windows z odniesieniem do
2.7.11
DLL, nagle pracował kiedy próbowałem wymieniając2.7.11
dla2.7.9
Nie jestem pewien, czy zrobiłem coś złego
2.7.11
, i to faktycznie działa, ale nie mam czasu, aby to rozgryźć.źródło
Miałem więc bardzo podobny problem na moim systemie Windows 10, ale w 64-bitowym vimie i pythonie.
TL; DR
W moim przypadku problem nie ma nic wspólnego z YouCompleteMe. Załóżmy, że YCM jest zgodny z Pythonem 3. Aby uczynić Python27 całkowicie niewidocznym dla VIM, to pomaga mi rozwiązać problem.
TortoiseHg
plik, który ma plik python27.dll i którego repozytorium znajduje sięPath
, co oznacza, że jest widoczny dla vima. Aby uczynić go niewidocznym, po prostu usuń repozytorium TortoiseHg zPath
(Ogólnie mówiąc, dowolnego programu niebędącego pythonem, który zawiera python27.dll i którego ścieżka znajduje się wPath
. Wykonującwhere python27.dll
w konsoli Windows, znajdziesz je wszystkie.)C:\Windows\System32
jest również widoczny dla vima. Aby uczynić go również niewidocznym, przenieś go doC:\Python27
. I usuńC:\Python27
zPath
.%PYTHONPATH%
niezaznaczone. Upewnij się, że repozytorium Python 3.5 znajduje się wPath
.Mój system
%PYTHONHOME%
jest ustawiony na folder instalacyjny Pythona 3 i jest zawarty wPath
.Mój problem
Błędy są wykrywane po uruchomieniu vima, jak pokazano poniżej.
Wiadomości są
Diagnostyka
Oba
:echo has('python')
i:echo has('python3')
wyjście 1. Ale kiedy to zrobię:py print 'test'
, vim daje mi ten sam komunikat o błędzie E887.Następnie całkowicie odinstalowałem Python 2.7.12, ale
:echo has('python')
nadal wyświetla dane wyjściowe 1 i:py print 'test'
nadal wyświetla błąd E887! Tymczasem:py3 print('test')
działa zawsze OK i test wyjściowy zgodnie z oczekiwaniami.Aby upewnić się, że nie jest to problem z YouCompleteMe, uruchomiłem vim przez
gvim -u NONE
. Test drukowania daje ten sam komunikat o błędzie. Problemem jest sam vim, który nie wykonuje personelu związanego z modułem strony Python 2.7.x.Niektórzy sugerują instalację Pythona 2.7.9, ale to nie działa dla mnie. Być może to rozwiązanie działa tylko w 32-bitowym pythonie 2.7. Nie testowałem, więc nie mogę potwierdzić.
Dlaczego to wszystko się dzieje:
where python27.dll
znalazłem pod repozytorium TortoiseHG, istnieje inny plik python27.dll. Dlatego:echo has('python')
nadal wyświetla 1 po odinstalowaniu Pythona 2.7.12.Następnie, mówiąc najprościej, polecenie
:has('python')
wyjściowe 1, jeśli oba warunki są spełnione:Vim jest kompilowany z funkcją + dyn / python (odpowiednio + dyn / python3 podczas wykonywania
:has('python3')
)Plik python27.dll znajduje się na Twojej ścieżce. (odpowiednio python35.dll. zobacz
:help-python-dynamic
i:help has-python
więcej informacji.) Ale to nie sprawdza dalej ; dlategohas-python
czek daje 1, ale nadal wykrywane są błędy.Python 2.7.12 nie ustawia się automatycznie
%PYTHONPATH%
, podczas gdy Python 3.5.2 ustawia tę wartość na<where_python_found>\Lib
i<where_python_found>\Lib\site-packages
przy starup Windows, jeśli znajdzie plik wykonywalny Pythona wPath
. W moim przypadku, w którym vim zainstalował tylko python 3.5.2 i python27.dll TortoiseHg, Kiedy uruchomię:py print 'test'
, vim będzie szukał modułu witryny python 2.7, ale w Pythonie 3.5%PYTHONPATH%
. Dlatego generowany jest błąd E887. W związku z tym, jeśli mamy ustawiony%PYTHONPATH%
jawnie do punktu do Pythona 2.7, Błąd E887 będzie ZNIKNĄ !Rozwiązanie
Patrz początek TL: część DR.
Wniosek
Kiedyś miałeś obie wersje Pythona i odinstalowałeś jedną. Możesz szczęśliwie myśleć, że jest czysty, ale vim powie ci, że znajduje usuniętego pytona, jesteś zaskoczony i ja również. Wynika to z faktu, że często w twoim systemie nadal pozostaje tajemnicza biblioteka DLL Pythona, która niestety może zostać wykryta przez vima. Niezależnie od tego, czy zachowujesz inną wersję Pythona na dysku twardym, czy nie, upewnij się, że vim jest całkowicie niewidoczny.
Fakt, że obie wersje Pythona mogą być wywoływane przez tę samą instancję vim w czasie wykonywania, jest w porządku. Prawdziwym problemem jest obie wersje JEDNEGO Pythona
PYTHONPATH
. JeśliPYTHONPATH
nie pasuje do wersji Pythona, python nie może znaleźć odpowiedniego pakietu strony i zmusić vima do narzekań. To sprawia, że większość z nas myśli, że to problem vim. Ale nie.źródło