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?

R. Doe
quelle

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

R. Doe
quelle
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).

Sato Katsura
quelle
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).

Dave Halter
quelle
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

Maksay
quelle
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.

Jay
quelle
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

Jthorpe
quelle