como mudar o interpretador python usado pelo jedi-vim

10

Eu tenho Anaconda(incluindo python3.5.2), VIM(7.4) e Jedi-VIMinstalado no meu sistema. Também havia um pythoninstalado no sistema linux por padrão.

O preenchimento automático está funcionando em pacotes base, pelo menos. Mas para pacotes como numpy(que foram incluídos Anaconda) a conclusão não está funcionando.

Usando o seguinte comando em 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_']

Isso indica para mim que o Anaconda-pythonintérprete e os pacotes nunca foram usados ​​por jedi-vim.

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

Como posso obter que o jedi-vim use também o caminho do anaconda python para obter o preenchimento automático de pacotes?

R. Doe
fonte

Respostas:

8

Consegui corrigi-lo fornecendo jedi-vima localização dos pacotes na minha anacondapasta usando a $PYTHONPATHvariável da seguinte maneira:

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

Obrigado a todos!

Ou adicione a seguinte linha em ~ / .bash_profile

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

R. Doe
fonte
Obrigado! Adicionando export PYTHONPATH="/home/user-name/anaconda3/lib/python3.5/site-packages":$PYTHONPATHao meu, ~/.zshrco jedi-vim funcionou corretamente com o anaconda.
Joelostblom 10/09/16
5
Você não deveria fazer isso. Isso pode levar a um SEGFAULT. É perigoso.
Dave Halter
@DaveHalter Quando você disse que isso poderia levar a um SEGFAULT, você estava se referindo ao que foi proposto na resposta ou ao que foi proposto no comentário anterior? Além disso, você sabe por que um SEGFAULT pode ocorrer?
Jack Kinsella
1
As versões do Python do @JackKinsella precisam corresponder; caso contrário, quando os módulos compilados são importados, você carrega versões diferentes. No entanto, atualizei minha resposta abaixo. Agora existem ambientes em Jedi, que tornam tudo isso possível com facilidade.
Dave Halter
4

Você não pode. Os comandos :pythone :python3sempre usam os intérpretes compilados. Se você possui uma versão recente do Vim com pythone / ou python3carregada dinamicamente (consulte :h python-dynamic), pode usar pythondlle pythonthreedllcarregar diferentes intérpretes, mas a substituição do CPython pelo Anaconda é IMO solicitando segfaults (desde que o Vim aceite, isso é).

Sato Katsura
fonte
3

2018+ Versões Jedi

Você pode usar apenas :let jedi#force_py_version=3.8se quiser mudar para a versão mais recente do Python, por exemplo. Infelizmente, ainda não há uma listagem de ambiente no jedi-vim. Precisamos construir isso (ele está disponível em Jedi).


Resposta antiga

Basicamente, a única coisa que você pode fazer atualmente é compilar o VIM com suporte ao Python 3.5. Provavelmente é uma ideia estúpida, mas funciona.

Caso contrário, haverá suporte para versões cruzadas do Python, com https://github.com/davidhalter/jedi/issues/385 .

Observe que pode ser possível modificar o PATH do Python, mas isso pode levar a um SEGFAULT e a outro comportamento indesejado, porque você basicamente permite que o Jedi execute o código binário de outra versão do Python (sim, isso realmente acontece).

Dave Halter
fonte
1

Você poderia compilar o vim com o anaconda: sim ./configure --with-features=huge --enable-pythoninterp --with-python-config-dir=~/anaconda/lib/python2.7/config/, lembro que fiz testes semelhantes depois e :py import sys; print sys.pathestava me dando resultados corretos.

Com base na pesquisa na web, talvez você possa fazer algo assim (por exemplo, para 3.4):

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

maksay
fonte
1

David tem um argumento válido sobre misturar o Vim com diferentes tipos de Python e se a codificação PYTHONPATHembutida no Anaconda Python em .profile/ .bashrcrealmente levar ao SEG 11, poderia-se usar um apelido de shell.

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

Talvez essa solução alternativa seja suficiente.

Jay
fonte
1

Estou usando o 32 bits vim para compatibilidade com outras extensões, mas o python de 64 bits é o primeiro no meu PATH por outros motivos. Portanto, instalei o python de 32 bits usando o conda via:

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

e adicionei isso ao meu .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 

onde C:/Users/USER/AppData/Local/Continuum/anaconda2é o resultado da chamadaconda info --base

Jthorpe
fonte