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?

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


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 é).


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).


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


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.


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.