как изменить интерпретатор 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 использовать также путь к anaconda python для получения автозаполнения пакета?

Р. Доу
источник

Ответы:

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джедай-вим для корректной работы с анакондой.
Joelostblom
5
Вы не должны этого делать. Это может привести к SEGFAULT. Это опасно.
Дэйв Холтер
@DaveHalter Когда вы сказали, что это может привести к SEGFAULT, вы имели в виду то, что было предложено в ответе или что было предложено в предыдущем комментарии? Кроме того, вы знаете, почему может произойти SEGFAULT?
Джек Кинселла
1
@JackKinsella Версии Python должны совпадать, иначе при импорте скомпилированных модулей вы загружаете разные версии. Однако я обновил свой ответ ниже. Сейчас в джедае есть среда, которая делает все это легко возможным.
Дейв Холтер
4

Ты не можешь :pythonИ :python3команды всегда используют вкомпилированные переводчик. Если у вас есть последняя версия Vim с pythonи / или python3динамически загруженной (см. :h python-dynamic), Вы можете использовать pythondllи pythonthreedllдля загрузки различных интерпретаторов, но замена CPython на Anaconda - это IMO, запрашивающая segfaults (при условии, что Vim принимает ее вообще, то есть).

Сато Кацура
источник
3

Версии джедая 2018+

Вы можете просто использовать, :let jedi#force_py_version=3.8если вы хотите, например, перейти на последнюю версию Python. К сожалению, в jedi-vim пока нет списка окружения. Нам нужно построить это (хотя оно доступно в джедаях).


Старый ответ

По сути, единственное, что вы можете сейчас сделать, - это скомпилировать VIM с поддержкой Python 3.5. Это, вероятно, глупая идея, но она работает.

В противном случае будет поддерживаться кросс-версии Python, с https://github.com/davidhalter/jedi/issues/385 .

Обратите внимание, что может быть возможно изменить Python PATH, но это может привести к SEGFAULT и другому нежелательному поведению, потому что вы в основном позволяете Jedi запускать двоичный код из другой версии Python (да, это действительно происходит).

Дейв Холтер
источник
1

Вы можете скомпилировать vim с помощью anaconda: я ./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

maksay
источник
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-битный Python, используя 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

Jthorpe
источник