Ich habe Windows 7 64-Bit mit Python 2.7.11 und Python 3.5.1 (beide 32-Bit) installiert und ich habe vim mit Python / Dyn und Python3 / Dyn kompiliert, aber es wird immer wieder der folgende Fehler angezeigt:
:py print "hello"
E887: Sorry, this command is disabled, the Python's site module could not be loaded
Die folgenden Funktionen funktionieren jedoch einwandfrei:
C:\python27\python -c "import site;"
und
:py3 print("hello")
Dies ist meine vim Versionsinfo:
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
Und where python27.dll
AusgängeC:\Windows\System32
Ich habe den Rat aus diesem Google-Gruppenbeitrag ausprobiert , aber ohne Erfolg.
Ich möchte nur, dass YouCompleteMe erfolgreich ausgeführt wird.
microsoft-windows
vimscript-python
afontaine
quelle
quelle
:help python-dynamic
sagt...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
kehrt zurückC:\Windows\System32\python27.dll
. Beachten Sie auch, dass, wenn die Bibliothek fehlt, ein anderer Fehler auftritt:E370: Could not load library python27.dll
undE263: Sorry, this command is disabled, the Python library could not be loaded.
:py3
funktioniert aber:py
nicht? Es ist möglich, wenn eines der Plugins:py3
während des Starts von vim ausgeführt wird. Siehe:he python-2-and-3
für die Erklärung, wie Python / Dyn und Python3 / Dyn zusammenarbeiten.Antworten:
In Ordnung, anscheinend lautet der Status wie folgt: VIM unter Windows unterstützt Python
2.7.9
nicht2.7.11
. Es könnte funktionieren2.7.10
, ich habe es nicht getestet.Auch wenn ich auf die mit einem Referenz VIM auf Windows kompiliert
2.7.11
DLL, funktionierte es plötzlich , als ich versuchte Auslagern2.7.11
für2.7.9
Ich bin mir nicht sicher, ob ich etwas falsch gemacht habe
2.7.11
und es funktioniert tatsächlich, aber ich habe nicht die Zeit, es herauszufinden.quelle
Ich hatte also ein sehr ähnliches Problem unter Windows 10, aber für 64-Bit-Vim und Python.
TL; DR
Das Problem hat in meinem Fall nichts mit YouCompleteMe zu tun. Angenommen, YCM entspricht Python 3. Python27 für VIM vollständig unsichtbar zu machen, hilft mir, das Problem zu lösen.
TortoiseHg
die eine python27.dll-Datei hat und deren Repository sich befindetPath
, was bedeutet, dass es für vim sichtbar ist. Um es unsichtbar zu machen, entfernen Sie einfach das TortoiseHg-Repository ausPath
(Im Allgemeinen alle Nicht-Python-Programme, die eine python27.dll enthalten und deren Pfad sich in befindetPath
. Wenn Sie dieswhere python27.dll
in der Windows-Konsole tun , finden Sie alle.)C:\Windows\System32
ist auch für vim sichtbar. Um es auch unsichtbar zu machen, verschieben Sie es nachC:\Python27
. Und entfernenC:\Python27
vonPath
.%PYTHONPATH%
nicht gesetzt. Stellen Sie sicher, dass sich das Python 3.5-Repository im befindetPath
.Mein System
%PYTHONHOME%
ist auf den Python 3-Installationsordner eingestellt und in enthaltenPath
.Mein Problem
Beim Starten von vim werden Fehler erkannt (siehe unten).
Nachrichten sind
Diagnose
Beides
:echo has('python')
und:echo has('python3')
Ausgabe 1. Wenn ich dies tue:py print 'test'
, gibt mir vim dieselbe E887-Fehlermeldung.Dann deinstalliere ich Python 2.7.12 komplett, gebe aber
:echo has('python')
immer noch 1 aus und:py print 'test'
gebe immer noch E887 Error! Inzwischen:py3 print('test')
arbeitet immer OK und Ausgangstest wie erwartet.Um sicherzustellen, dass YouCompleteMe kein Problem darstellt, habe ich vim by gestartet
gvim -u NONE
. Der Drucktest gibt die gleiche Fehlermeldung aus. Das Problem liegt also bei vim selbst, das die Mitarbeiter des Python 2.7.x-Site-Moduls nicht unterstützt.Einige Leute schlagen vor, Python 2.7.9 zu installieren, aber es funktioniert bei mir nicht. Möglicherweise funktioniert diese Lösung nur für 32-Bit-Python 2.7. Ich habe nicht getestet, daher kann ich nicht bestätigen.
Warum all dies passiert:
where python27.dll
ich im TortoiseHG-Repository eine weitere python27.dll-Datei gefunden. Aus diesem Grund wird:echo has('python')
nach der Deinstallation von Python 2.7.12 immer noch 1 ausgegeben.Um es einfach auszudrücken, gibt der Befehl
:has('python')
1 aus, wenn beide Bedingungen erfüllt sind:Vim wird mit der Funktion + dyn / python kompiliert (jeweils + dyn / python3
:has('python3')
)Die Datei python27.dll befindet sich in Ihrem Pfad. (bzw. python35.dll. siehe
:help-python-dynamic
und:help has-python
für weitere Informationen.) Es werden jedoch keine weiteren Überprüfungen durchgeführt . Aus diesem Grundhas-python
gibt check 1, aber es werden immer noch Fehler erkannt.Python 2.7.12 wird nicht automatisch festgelegt
%PYTHONPATH%
, während Python 3.5.2 diesen Wert auf<where_python_found>\Lib
und<where_python_found>\Lib\site-packages
bei Windows Starup setzt, wenn Python als ausführbar in gefunden wirdPath
. In meinem Fall, in dem nur Python 3.5.2 installiert ist und TortoiseHgs python27.dll von vim gefunden:py print 'test'
wird, sucht vim beim Ausführen das Python 2.7-Site-Modul, jedoch in Python 3.5%PYTHONPATH%
. Deshalb wird Fehler E887 ausgelöst. Wenn wir also festgelegt%PYTHONPATH%
wird ausdrücklich auf Punkt zu Python 2.7, Der E887 Fehler DISAPPEAR !Lösung
Siehe Anfang TL: DR-Teil.
Fazit
Sie hatten einmal beide Python-Versionen und deinstallierten eine. Sie mögen glücklich denken, dass es sauber ist, aber ich sage Ihnen, dass er die Python findet, die Sie gelöscht haben. Sie sind erstaunt und ich auch. Das liegt daran, dass in Ihrem System oft noch eine mysteriöse Python-DLL vorhanden ist, die leider von vim erkannt werden kann. Unabhängig davon, ob Sie eine andere Python-Version auf Ihrer Festplatte speichern oder nicht, stellen Sie sicher, dass sie für vim vollständig unsichtbar ist.
Die Tatsache, dass beide Python-Versionen zur Laufzeit von derselben Instanz vim aufgerufen werden können, ist in Ordnung. Das eigentliche Problem ist, dass beide Versionen von Python Shares ONE sind
PYTHONPATH
. WennPYTHONPATH
die Python-Version nicht übereinstimmt, findet Python nicht das richtige Site-Paket und lässt vim sich beschweren. Dies lässt die meisten von uns denken, dass es sich um ein Vim-Problem handelt. Aber nein.quelle