comment changer l'interpréteur python utilisé par jedi-vim


10

J'ai Anaconda(y compris python3.5.2), VIM(7.4) et Jedi-VIMinstallé sur mon système. Il y avait également une pythoninstallation sur le système Linux par défaut.

La saisie semi-automatique fonctionne au moins sur les packages de base. Mais pour des paquets comme numpy(qui était inclus dans Anaconda), l'achèvement ne fonctionne pas.

En utilisant la commande suivante dans 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_']

Cela m'indique que l' Anaconda-pythoninterprète et les packages n'ont jamais été utilisés par jedi-vim.

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

Comment puis-je faire en sorte que jedi-vim utilise également le chemin d’anaconda python pour obtenir la saisie semi-automatique des packages?

Réponses:


8

J'ai pu le réparer moi-même en fournissant jedi-viml'emplacement des packages dans mon anacondadossier en utilisant la $PYTHONPATHvariable comme suit:

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

Merci à tous!

Ou ajoutez la ligne suivante dans ~ / .bash_profile

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


Merci! Ajout export PYTHONPATH="/home/user-name/anaconda3/lib/python3.5/site-packages":$PYTHONPATHà mon ~/.zshrcgot jedi-vim pour fonctionner correctement avec anaconda.
joelostblom

5
Tu ne devrais pas faire ça. Cela pourrait conduire à un SEGFAULT. C'est dangereux.
Dave Halter

@DaveHalter Lorsque vous avez dit que cela pouvait conduire à un SEGFAULT, faisiez-vous référence à ce qui était proposé dans la réponse ou à ce qui était proposé dans le commentaire précédent? Savez -vous également pourquoi un SEGFAULT peut se produire?
Jack Kinsella

1
Les versions de @JackKinsella Python doivent correspondre, sinon, lorsque les modules compilés sont importés, vous chargez différentes versions. Cependant, j'ai mis à jour ma réponse ci-dessous. Il existe maintenant des environnements dans Jedi, qui rendent tout cela facilement possible.
Dave Halter le

4

Tu ne peux pas. Les commandes :pythonet :python3utilisent toujours les interprètes compilés. Si vous avez une version récente de Vim avec pythonet / ou python3chargé dynamiquement (voir :h python-dynamic), vous pouvez utiliser pythondllet pythonthreedllcharger différents interprètes, mais le remplacement de CPython par Anaconda est IMO demande des erreurs de segmentation (à condition que Vim l'accepte du tout, c'est-à-dire).


3

Versions Jedi 2018+

Vous pouvez simplement l'utiliser :let jedi#force_py_version=3.8si vous souhaitez passer à la dernière version de Python, par exemple. Malheureusement, il n'y a pas encore de liste d'environnement dans jedi-vim. Nous devons le construire (il est cependant disponible dans Jedi).


Ancienne réponse

Fondamentalement, la seule chose que vous pouvez faire actuellement est de compiler VIM avec la prise en charge de Python 3.5. C'est probablement une idée stupide, mais ça marche.

Sinon, il y aura un support pour les versions croisées de Python, avec https://github.com/davidhalter/jedi/issues/385 .

Notez qu'il peut être possible de modifier le CHEMIN Python, mais cela peut conduire à un SEGFAULT et à d'autres comportements indésirables, car vous autorisez essentiellement Jedi à exécuter du code binaire à partir d'une autre version de Python (Oui, cela se produit réellement).


1

Vous pouvez compiler vim avec anaconda: je l'ai fait ./configure --with-features=huge --enable-pythoninterp --with-python-config-dir=~/anaconda/lib/python2.7/config/, je me souviens que j'ai fait des tests similaires par la suite et que :py import sys; print sys.pathje donnais des résultats corrects.

Sur la base de la recherche sur le Web, vous pourriez peut-être faire quelque chose comme ça (ex. Pour 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 a un argument valable sur le mélange de Vim avec différentes saveurs de Python et si un codage dur PYTHONPATHvers Anaconda Python dans .profile/ .bashrcmène vraiment à SEG 11, pourrait-on utiliser un alias de shell.

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

Peut-être que ce contournement suffira.


1

J'utilise vim 32 bits pour la compatibilité avec d'autres extensions, mais le python 64 bits est le premier sur mon PATH pour d'autres raisons. J'ai donc installé le python 32 bits en utilisant conda via:

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

et l'a ajouté à mon .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 

C:/Users/USER/AppData/Local/Continuum/anaconda2est le résultat de l'appelconda info --base

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.