Як змінити інтерпретатора python, який використовується jedi-vim


10

У мене Anaconda(включаючи python3.5.2), VIM(7.4) та Jedi-VIMвстановлено у моїй системі. Також pythonу системі Linux встановлено за замовчуванням.

Автозавершення працює принаймні на базових пакетах. Але для пакетів типу numpy(який був включений Anaconda) завершення не працює.

Використовуючи таку команду в 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_']

Це вказує на мене, що Anaconda-pythonінтерпретатор та пакунки ніколи не використовуються jedi-vim.

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

Як я можу змусити jedi-vim використовувати також шлях анаконди-пітона для отримання автозаповнення пакета?

Відповіді:


8

Я зміг це виправити самостійно, вказавши jedi-vimрозташування пакетів у своїй anacondaпапці за допомогою $PYTHONPATHзмінної:

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

Дякую всім!

Або Додати наступний рядок у ~ / .bash_profile

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


Дякую! Додавши export PYTHONPATH="/home/user-name/anaconda3/lib/python3.5/site-packages":$PYTHONPATHдо свого ~/.zshrcотриманого jedi-vim, щоб правильно працювати з анакондами.
joelostblom

5
Ти не повинен цього робити. Це може призвести до SEGFAULT. Це небезпечно.
Дейв Холтер

@DaveHalter Коли ви сказали, що це може призвести до SEGFAULT, ви мали на увазі те, що було запропоновано у відповіді, або що було запропоновано в попередньому коментарі? Крім того, чи знаєте ви, чому може виникнути SEGFAULT?
Джек Кінселла

1
Версії @JackKinsella Python повинні відповідати, інакше при імпортуванні компільованих модулів ви завантажуєте різні версії. Однак я оновив свою відповідь нижче. Зараз у джедаях існують середовища, які роблять це все легко можливим.
Дейв

4

Ви не можете. Команди :pythonі :python3завжди використовують компільовані інтерпретатори. Якщо у вас є остання версія Vim із pythonта / або python3завантаженою динамічно (див. :h python-dynamic), Ви можете використовувати pythondllта pythonthreedllзавантажувати різні інтерпретатори, але заміна CPython на Anaconda IMO просить провести segfault (за умови, що Vim це взагалі приймає, тобто).


3

2018+ версії джедаїв

Ви можете просто використовувати, :let jedi#force_py_version=3.8якщо ви хочете, наприклад, перейти на останню версію Python. На жаль, поки немає переліку навколишнього середовища в jedi-vim. Нам потрібно це будувати (він доступний і в джедаях).


Стара відповідь

По суті, єдине, що ви можете зробити зараз, - це компілювати VIM з підтримкою Python 3.5. Це, мабуть, дурна думка, але вона працює.

Інакше буде підтримка перехресних версій Python, за допомогою https://github.com/davidhalter/jedi/isissue/385 .

Зауважте, що можливо змінити Python PATH, але це може призвести до SEGFAULT та іншої небажаної поведінки, оскільки ви в основному дозволяєте джедаям запускати бінарний код з іншої версії Python (Так, це насправді буває).


1

Ви можете скласти vim з анакондою: я це ./configure --with-features=huge --enable-pythoninterp --with-python-config-dir=~/anaconda/lib/python2.7/config/, я пам’ятаю, що потім робив подібні тести і :py import sys; print sys.pathдавав мені правильні результати.

На основі пошуку в Інтернеті ви можете зробити щось подібне (наприклад, для 3.4):

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


1

Девід має вагому думку щодо змішування Vim з різними ароматами Python, і якщо жорстке кодування PYTHONPATHдо Anaconda Python в .profile/ .bashrcдійсно призводить до SEG 11, можна було б використовувати псевдонім оболонки.

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

Можливо, цього обходу буде достатньо.


1

Я використовую 32-бітний vim для сумісності з іншими розширеннями, але 64-бітний пітон є першим на моєму PATH з інших причин. Отже, я встановив 32-бітний пітон за допомогою conda через:

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

і додав це до мого .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/anaconda2результат дзвінкаconda info --base

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.