jak zmienić interpreter python używany przez jedi-vim


10

Mam Anaconda(w tym python3.5.2), VIM(7.4) i Jedi-VIMzainstalowałem w swoim systemie. pythonDomyślnie był również zainstalowany w systemie Linux.

Autouzupełnianie działa przynajmniej na pakietach podstawowych. Ale w przypadku pakietów takich jak numpy(które zostały uwzględnione Anaconda) zakończenie nie działa.

Za pomocą następującego polecenia w 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_']

Wskazuje mi to, że Anaconda-pythoninterpreter i pakiety nigdy nie są używane przez jedi-vim.

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

Jak sprawić, aby jedi-vim używał także ścieżki anakondy do pobierania autouzupełniania pakietów?

Odpowiedzi:


8

Udało mi się to naprawić samodzielnie, podając jedi-vimlokalizację pakietów w moim anacondafolderze, używając $PYTHONPATHzmiennej w następujący sposób:

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

Dziękuje za wszystko!

Lub Dodaj następujący wiersz w ~ / .bash_profile

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


Dzięki! Dodając export PYTHONPATH="/home/user-name/anaconda3/lib/python3.5/site-packages":$PYTHONPATHdo mojego ~/.zshrcmam jedi-vim działa poprawnie z anakondą.
joelostblom 10.09.16

5
Nie powinieneś tego robić. Może to prowadzić do SEGFAULT. To jest niebezpieczne.
Dave Halter,

@DaveHalter Kiedy mówiłeś, że może to prowadzić do SEGFAULT, czy odwoływałeś się do tego, co zaproponowano w odpowiedzi lub co zaproponowano w poprzednim komentarzu? Czy wiesz także, dlaczego może wystąpić SEGFAULT?
Jack Kinsella

1
@JackKinsella Wersje Pythona muszą się zgadzać, w przeciwnym razie po zaimportowaniu skompilowanych modułów ładujesz różne wersje. Jednak zaktualizowałem swoją odpowiedź poniżej. W Jedi istnieją teraz środowiska, które sprawiają, że wszystko jest łatwo możliwe.
Dave Halter

4

Nie możesz :pythonI :python3polecenia zawsze używać wkompilowanych tłumaczy. Jeśli masz najnowszą wersję Vima z pythoni / lub python3ładowaną dynamicznie (patrz :h python-dynamic), możesz używać pythondlli pythonthreedllładować różne interpretery, ale zastąpienie CPython przez Anacondę to IMO z prośbą o segfault (pod warunkiem, że Vim w ogóle go akceptuje).


3

2018+ Wersje Jedi

Możesz użyć, :let jedi#force_py_version=3.8jeśli chcesz na przykład przejść do najnowszej wersji Pythona. Niestety w Jedi-vim nie ma jeszcze wykazu środowiska. Musimy to zbudować (jest to jednak dostępne w Jedi).


Stara odpowiedź

Zasadniczo jedyne, co możesz teraz zrobić, to skompilować VIM z obsługą Python 3.5. To chyba głupi pomysł, ale działa.

W przeciwnym razie będzie dostępna obsługa krzyżowych wersji Pythona z https://github.com/davidhalter/jedi/issues/385 .

Zauważ, że może być możliwa modyfikacja PATH Pythona, ale może to prowadzić do SEGFAULT i innych niepożądanych zachowań, ponieważ zasadniczo pozwalasz Jedi na uruchamianie kodu binarnego z innej wersji Pythona (Tak, to się faktycznie dzieje).


1

Możesz skompilować vima z anakondą: zrobiłem ./configure --with-features=huge --enable-pythoninterp --with-python-config-dir=~/anaconda/lib/python2.7/config/, pamiętam, że zrobiłem później podobne testy i dałem :py import sys; print sys.pathprawidłowe wyniki.

Na podstawie wyszukiwania w Internecie możesz zrobić coś takiego (np. Dla 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 ma PYTHONPATHrację, mówiąc o mieszaniu Vima z różnymi smakami Pythona, a jeśli twarde kodowanie do Anacondy Python w .profile/ .bashrcnaprawdę prowadzi do SEG 11, można użyć aliasu powłoki.

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

Być może to obejście wystarczy.


1

Używam 32-bitowego vima dla kompatybilności z innymi rozszerzeniami, ale 64-bitowy python jest pierwszy na mojej PATH z innych powodów. Dlatego zainstalowałem 32-bitowy python za pomocą conda poprzez:

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

i dodał to do mojego .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 

gdzie C:/Users/USER/AppData/Local/Continuum/anaconda2jest wynik wywołaniaconda info --base

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.