cómo cambiar el intérprete de python utilizado por jedi-vim

10

Tengo Anaconda(incluyendo python3.5.2), VIM(7.4) e Jedi-VIMinstalado en mi sistema. También había pythoninstalado en el sistema Linux de forma predeterminada.

El autocompletado está funcionando en paquetes base, al menos. Pero para paquetes como numpy(que se incluyó en Anaconda) la finalización no funciona.

Al usar el siguiente comando en 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_']

Esto me indica que el Anaconda-pythonintérprete y los paquetes nunca han sido utilizados por jedi-vim.

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

¿Cómo puedo hacer que jedi-vim use también la ruta de Anaconda Python para obtener el autocompletado de paquetes?

R. Doe
fuente

Respuestas:

8

Pude arreglarlo yo mismo al proporcionar jedi-vimla ubicación de los paquetes en mi anacondacarpeta usando la $PYTHONPATHvariable de la siguiente manera:

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

¡Gracias a todos!

O agregue la siguiente línea en ~ / .bash_profile

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

R. Doe
fuente
¡Gracias! Agregando export PYTHONPATH="/home/user-name/anaconda3/lib/python3.5/site-packages":$PYTHONPATHa mi ~/.zshrctengo jedi-vim para trabajar correctamente con anaconda.
joelostblom
55
No deberías hacer eso. Eso podría conducir a un SEGFAULT. Es peligroso.
Dave Halter
@DaveHalter Cuando dijo que podría conducir a un SEGFAULT, ¿se refería a lo que se propuso en la respuesta o lo que se propuso en el comentario anterior? Además, ¿sabe por qué podría ocurrir un SEGFAULT?
Jack Kinsella
1
Las versiones de @JackKinsella Python deben coincidir, de lo contrario, cuando se importan módulos compilados, se cargan diferentes versiones. Sin embargo, he actualizado mi respuesta a continuación. Ahora hay entornos en Jedi, que hacen todo esto fácilmente posible.
Dave Halter
4

No puedes Los comandos :pythony :python3siempre usan los intérpretes compilados. Si tiene una versión reciente de Vim con pythony / o python3cargada dinámicamente (vea :h python-dynamic) puede usar pythondlly pythonthreedllcargar diferentes intérpretes, pero reemplazar CPython por Anaconda es IMO pidiendo segfaults (siempre que Vim lo acepte).

Sato Katsura
fuente
3

2018+ Versiones Jedi

Solo puede usar :let jedi#force_py_version=3.8si desea cambiar a la última versión de Python, por ejemplo. Desafortunadamente, todavía no hay una lista de entornos en jedi-vim. Necesitamos construir eso (sin embargo, está disponible en Jedi).


Vieja respuesta

Básicamente, lo único que puede hacer actualmente es compilar VIM con soporte para Python 3.5. Esa es probablemente una idea estúpida, pero funciona.

De lo contrario, habrá soporte para versiones cruzadas de Python, con https://github.com/davidhalter/jedi/issues/385 .

Tenga en cuenta que podría ser posible modificar la RUTA de Python, pero eso podría conducir a un SEGFAULT y a otro comportamiento no deseado, porque básicamente está permitiendo que Jedi ejecute código binario desde otra versión de Python (Sí, en realidad sucede).

Dave Halter
fuente
1

Podrías compilar vim con anaconda: lo hice ./configure --with-features=huge --enable-pythoninterp --with-python-config-dir=~/anaconda/lib/python2.7/config/, recuerdo que hice pruebas similares después y :py import sys; print sys.pathme estaba dando resultados correctos.

Según la búsqueda en la web , tal vez podría hacer algo como esto (por ejemplo, 3.4):

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

maksay
fuente
1

David tiene un punto válido acerca de mezclar Vim con diferentes sabores de Python y si la codificación dura PYTHONPATHde Anaconda Python en .profile/ .bashrcrealmente conduce a SEG 11, ¿podría uno usar un alias de shell?

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

Quizás esta solución sea suficiente.

arrendajo
fuente
1

Estoy usando 32 bits vim para compatibilidad con otras extensiones, pero el pitón de 64 bits es el primero en mi RUTA por otras razones. Por lo tanto, instalé el python de 32 bits usando conda a través de:

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

y agregué esto a mi .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 

donde C:/Users/USER/AppData/Local/Continuum/anaconda2es el resultado de llamarconda info --base

Jthorpe
fuente