come cambiare l'interprete python usato da jedi-vim


10

Ho Anaconda(incluso python3.5.2), VIM(7.4) e Jedi-VIMinstallato sul mio sistema. C'era anche un pythoninstallato sul sistema Linux per impostazione predefinita.

Il completamento automatico sta funzionando sui pacchetti di base, almeno. Ma per pacchetti come numpy(incluso in Anaconda) il completamento non funziona.

Utilizzando il seguente comando 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_']

Questo mi indica che l' Anaconda-pythoninterprete e i pacchetti non sono mai stati utilizzati da jedi-vim.

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

Come posso ottenere jedi-vim per utilizzare anche il percorso di Anaconda Python per ottenere il completamento automatico del pacchetto?

Risposte:


8

Sono stato in grado di risolverlo da solo fornendo jedi-vimla posizione dei pacchetti nella mia anacondacartella usando la $PYTHONPATHvariabile come segue:

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

Grazie a tutti!

Oppure aggiungi la seguente riga in ~ / .bash_profile

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


Grazie! Aggiungendo export PYTHONPATH="/home/user-name/anaconda3/lib/python3.5/site-packages":$PYTHONPATHal mio ~/.zshrcho jedi-vim per funzionare correttamente con Anaconda.
Joelostblom,

5
Non dovresti farlo. Ciò potrebbe portare a un SEGFAULT. È pericoloso.
Dave Halter,

@DaveHalter Quando hai detto che potrebbe portare a un SEGFAULT, ti riferivi a ciò che è stato proposto nella risposta o a ciò che è stato proposto nel commento precedente? Inoltre, sai perché potrebbe verificarsi un SEGFAULT?
Jack Kinsella,

1
Le versioni di @JackKinsella Python devono corrispondere, altrimenti quando i moduli compilati vengono importati si caricano versioni diverse. Tuttavia ho aggiornato la mia risposta di seguito. Ora ci sono ambienti in Jedi, che rendono tutto ciò facilmente possibile.
Dave Halter,

4

Non puoi. I comandi :pythone :python3usano sempre gli interpreti compilati. Se hai una versione recente di Vim con pythone / o python3caricato in modo dinamico (vedi :h python-dynamic) puoi usare pythondlle pythonthreedllcaricare diversi interpreti, ma sostituire CPython con Anaconda è IMO che richiede segfault (a condizione che Vim lo accetti affatto, cioè).


3

Versioni Jedi 2018+

Ad esempio, puoi usare solo :let jedi#force_py_version=3.8se vuoi passare all'ultima versione di Python. Sfortunatamente non esiste ancora un elenco di ambienti in jedi-vim. Dobbiamo costruirlo (è disponibile in Jedi, però).


Vecchia risposta

Fondamentalmente l'unica cosa che puoi fare attualmente è compilare VIM con il supporto di Python 3.5. Questa è probabilmente un'idea stupida, ma funziona.

Altrimenti ci sarà supporto per le versioni cross Python, con https://github.com/davidhalter/jedi/issues/385 .

Nota che potrebbe essere possibile modificare il PERCORSO Python, ma ciò potrebbe portare a un SEGFAULT e ad altri comportamenti indesiderati, in quanto stai sostanzialmente permettendo a Jedi di eseguire codice binario da un'altra versione di Python (Sì, in realtà accade).


1

Potresti compilare VIM con Anaconda: l'ho fatto ./configure --with-features=huge --enable-pythoninterp --with-python-config-dir=~/anaconda/lib/python2.7/config/, ricordo che dopo ho fatto test simili e :py import sys; print sys.pathmi stava dando risultati corretti.

Sulla base della ricerca web potresti forse fare qualcosa del genere (es. Per 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 ha un punto valido sull'interazione di Vim con diversi gusti di Python e se la codifica hard PYTHONPATHdi Anaconda Python in .profile/ .bashrcdavvero porta a SEG 11 si potrebbe usare un alias di shell.

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

Forse questa soluzione sarà sufficiente.


1

Sto usando vim a 32 bit per la compatibilità con altre estensioni, ma il pitone a 64 bit è il primo sul mio PERCORSO per altri motivi. Quindi ho installato il pitone a 32 bit usando conda tramite:

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

e aggiunto questo al mio .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 

dove C:/Users/USER/AppData/Local/Continuum/anaconda2è il risultato della chiamataconda info --base

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.