wie man den von jedi-vim verwendeten Python-Interpreter ändert


10

Ich habe Anaconda(einschließlich Python3.5.2), VIM(7.4) und Jedi-VIMauf meinem System installiert. Auf pythondem Linux-System war standardmäßig auch ein installiert.

Die automatische Vervollständigung funktioniert zumindest bei Basispaketen. Aber für Pakete wie numpy(die in enthalten waren Anaconda) funktioniert die Fertigstellung nicht.

Mit dem folgenden Befehl in VIM:

:py3 import sys; print(sys.path)

['/usr/lib/python35.zip', 
'/usr/lib/python3.5', 
'/usr/lib/python3.5/plat-x86_64-linux-gnu', 
'/usr/lib/python3.5/lib-dynload', 
'/usr/local/lib/python3.5/dist-packages', 
'/usr/lib/python3/dist-packages', 
'_vim_path_']

Dies zeigt mir, dass der Anaconda-pythonInterpreter und die Pakete nie von verwendet wurden jedi-vim.

$which python
/home/user1/anaconda3/bin/python

Wie kann ich jedi-vim dazu bringen, auch den Pfad von Anaconda Python zu verwenden, um die automatische Vervollständigung von Paketen zu erhalten?

Antworten:


8

Ich konnte das Problem selbst beheben, indem ich jedi-vimden Speicherort der Pakete in meinem anacondaOrdner mithilfe der folgenden $PYTHONPATHVariablen angab:

export PYTHONPATH=$PYTHONPATH:/home/user1/anaconda3/lib/python3.5/site-packages

Dank an alle!

Oder Fügen Sie die folgende Zeile in ~ / .bash_profile hinzu

export PYTHONPATH=$PYTHONPATH:/home/user1/anaconda3/lib/python3.5/site-packages


Vielen Dank! Das Hinzufügen export PYTHONPATH="/home/user-name/anaconda3/lib/python3.5/site-packages":$PYTHONPATHzu meinem ~/.zshrchat jedi-vim, um richtig mit anaconda zu arbeiten.
Joelostblom

5
Das solltest du nicht tun. Das könnte zu einem SEGFAULT führen. Es ist gefährlich.
Dave Halter

@ DaveHalter Als Sie sagten, es könnte zu einem SEGFAULT führen, haben Sie sich auf das bezogen, was in der Antwort vorgeschlagen wurde oder was im vorherigen Kommentar vorgeschlagen wurde? Wissen Sie auch, warum ein SEGFAULT auftreten kann?
Jack Kinsella

1
@ JackKinsella Python-Versionen müssen übereinstimmen, andernfalls laden Sie beim Importieren kompilierter Module verschiedene Versionen. Ich habe jedoch meine Antwort unten aktualisiert. Es gibt jetzt Umgebungen in Jedi, die dies alles leicht ermöglichen.
Dave Halter

4

Das kannst du nicht. Die Befehle :pythonund verwenden :python3immer die kompilierten Interpreter. Wenn Sie eine aktuelle Version von Vim mit pythonund / oder python3dynamisch geladen haben (siehe :h python-dynamic), können Sie verschiedene Interpreter verwenden pythondllund pythonthreedllladen. Wenn Sie jedoch CPython durch Anaconda ersetzen, werden Sie von IMO nach Segfaults gefragt (vorausgesetzt, Vim akzeptiert diese überhaupt).


3

2018+ Jedi-Versionen

Sie können es nur verwenden, :let jedi#force_py_version=3.8wenn Sie beispielsweise zur neuesten Python-Version wechseln möchten. Leider gibt es in jedi-vim noch keine Umweltliste. Wir müssen das bauen (es ist jedoch in Jedi verfügbar).


Alte Antwort

Grundsätzlich können Sie derzeit nur VIM mit Python 3.5-Unterstützung kompilieren. Das ist wahrscheinlich eine dumme Idee, aber es funktioniert.

Andernfalls werden Cross-Python-Versionen mit https://github.com/davidhalter/jedi/issues/385 unterstützt .

Beachten Sie, dass es möglicherweise möglich ist, den Python-Pfad zu ändern. Dies kann jedoch zu einem SEGFAULT und anderen unerwünschten Verhaltensweisen führen, da Sie Jedi grundsätzlich erlauben, Binärcode von einer anderen Python-Version auszuführen (Ja, das passiert tatsächlich).


1

Sie könnten vim mit anaconda kompilieren: Ich habe ./configure --with-features=huge --enable-pythoninterp --with-python-config-dir=~/anaconda/lib/python2.7/config/mich daran erinnert, dass ich danach ähnliche Tests durchgeführt habe und :py import sys; print sys.pathmir korrekte Ergebnisse gegeben habe.

Basierend auf der Websuche könnten Sie vielleicht so etwas tun (zB für 3.4):

./configure --enable-python3interp --with-features=huge --with-python3-config-dir=~/anaconda/lib/python3.4/config-3.4m-x86_64-linux-gnu


1

David hat einen gültigen Punkt in Bezug auf die Vermischung von Vim mit verschiedenen Python-Varianten. Wenn eine harte Codierung PYTHONPATHin Anaconda Python in .profile/ .bashrcwirklich zu SEG 11 führt, könnte man einen Shell-Alias ​​verwenden.

alias vim3='PYTHONPATH=/usr/lib/Anaonda/.../site-packages vim'

Vielleicht reicht diese Umgehung aus.


1

Ich verwende 32-Bit-Vim, um die Kompatibilität mit anderen Erweiterungen zu gewährleisten, aber die 64-Bit-Python befindet sich aus anderen Gründen zuerst auf meinem PATH. Daher habe ich die 32-Bit-Python mit conda installiert über:

set CONDA_FORCE_32BIT=1
conda create -n py27_32bit python=2.7
activate py27_32bit
pip install jedi
deactivate

und fügte dies zu meinem hinzu .vimrc:

if has('win32')&& isdirectory('C:/Users/USER/AppData/Local/Continuum/anaconda2/envs/py27_32bit/')
    let $PATH = 'C:/Users/USER/AppData/Local/Continuum/anaconda2/envs/py27_32bit/;
                \C:/Users/USER/AppData/Local/Continuum/anaconda2/envs/py27_32bit/lib/;' . $PATH
    let $PYTHONPATH = 'C:/Users/USER/AppData/Local/Continuum/anaconda2/envs/py27_32bit/;
                \C:/Users/USER/AppData/Local/Continuum/anaconda2/envs/py27_32bit/DLLs/;
                \:/Users/USER/AppData/Local/Continuum/anaconda2/envs/py27_32bit/lib/;' 
endif 

Wo C:/Users/USER/AppData/Local/Continuum/anaconda2ist das Ergebnis des Anrufs?conda info --base

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.