Ich habe das Build-System von YouCompleteMe überprüft und es verwendet ein benutzerdefiniertes Build-Skript, das das Python-Modul distutils
verwendet um die Pfade zu Pythons Bibliothek und Include-Verzeichnissen zu finden. Ihre /usr/local/
Die Installation von Python ist wahrscheinlich in Ihrem PATH
enthalten Variable vor dem offiziellen /usr
Installation, also einfach python
ausführen führt wahrscheinlich Ihre benutzerdefinierte Installation aus und erzeugt distutils
seine Verzeichnisse zurückgeben.
Um zu überprüfen, ob dies wahr ist, führen Sie which python
aus . Ich nehme an, es wird so etwas wie /usr/local/bin/python
zurückgeben .
An diesem Punkt sehe ich mehrere Optionen (in der Reihenfolge ihrer Präferenz).
-
Versuchen Sie, das Installationsskript von YCM auszuführen, indem Sie explizit angeben, welche ausführbare Python-Datei es ausführen soll:
/usr/bin/python ./install.py --clang-completer
Wenn Sie zusätzliche Vervollständiger mit YCM verwenden, sollten Sie die entsprechenden Flags in die obige Zeile einfügen (z. B.
--js-completer
für die JavaScript-Vervollständigung). -
Bearbeiten Sie das Skript
third_party/ycmd/build.py
im Plugin-Verzeichnis von YouCompleteMe, um die Pfade für Ihre benutzerdefinierte Python-Installation fest zu codieren. Beispielsweise könnten Sie den vorhandenenFindPythonLibraries
ersetzen Funktion mit folgendem:def FindPythonLibraries(): return ('/usr/lib/python2.7/config-x86_64-linux-gnu/libpython2.7.so', '/usr/include/python2.7')
Beachten Sie, dass dies die Aktualisierung von YouCompleteMe erschwert, da Sie sicherstellen müssen, dass es nicht überschrieben wird, wenn Sie seine Quelle aktualisieren.
- Ersetzen Sie Ihre benutzerdefinierte Installation von Python durch eine, die als gemeinsam genutzte Bibliothek erstellt wurde. Die Details dazu hängen davon ab, wie Sie die vorhandene Python-Installation überhaupt installiert haben. Sie können überprüfen, ob Sie es über ein Paket installiert haben, indem Sie
dpkg -S /usr/local/lib/python2.7/config/libpython2.7.a
verwenden . Dieser Befehl teilt Ihnen mit, welches Paket diese Datei installiert hat, es sei denn, Sie haben es manuell installiert (unter Umgehung des Paketmanagers). - Entfernen Sie Ihren benutzerdefinierten
/usr/local
Python-Installation, während Sie sicherstellen, dass Sie Python aus den offiziellen Repositories installiert haben (Paketepython2.7
undlibpython2.7
).
Auf lange Sicht wären Sie wahrscheinlich besser dran, wenn Sie die offiziellen Python-Pakete verwenden.