bagaimana cara mengubah interpreter python yang digunakan oleh jedi-vim

10

Saya telah Anaconda(termasuk python3.5.2), VIM(7.4) dan Jedi-VIMdiinstal pada sistem saya. Ada juga yang pythondiinstal pada sistem linux secara default.

Penyelesaian otomatis bekerja pada paket dasar, setidaknya. Tetapi untuk paket seperti numpy(yang termasuk dalam Anaconda) penyelesaian tidak berfungsi.

Dengan menggunakan perintah berikut di 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_']

Ini menunjukkan kepada saya bahwa Anaconda-pythoninterpreter dan paket tidak pernah digunakan oleh jedi-vim.

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

Bagaimana saya bisa mendapatkan jedi-vim untuk menggunakan juga jalur anaconda python untuk mendapatkan paket autocompletion?

R. Doe
sumber

Jawaban:

8

Saya dapat memperbaikinya sendiri dengan menyediakan jedi-vimlokasi paket di anacondafolder saya menggunakan $PYTHONPATHvariabel sebagai berikut:

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

Terimakasih untuk semua!

Atau Tambahkan baris berikut di ~ / .bash_profile

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

R. Doe
sumber
Terima kasih! Menambahkan export PYTHONPATH="/home/user-name/anaconda3/lib/python3.5/site-packages":$PYTHONPATHke saya ~/.zshrcmendapat jedi-vim untuk bekerja dengan benar dengan anaconda.
joelostblom
5
Anda seharusnya tidak melakukan itu. Itu mungkin mengarah ke SEGFAULT. Itu berbahaya.
Dave Halter
@DaveHalter Ketika Anda mengatakan itu mungkin mengarah ke SEGFAULT, apakah Anda merujuk pada apa yang diusulkan dalam jawaban atau apa yang diusulkan dalam komentar sebelumnya? Juga, tahukah Anda mengapa SEGFAULT mungkin terjadi?
Jack Kinsella
1
@JackKinsella Versi Python harus cocok, jika tidak, ketika modul yang dikompilasi diimpor, Anda memuat versi yang berbeda. Namun saya telah memperbarui jawaban saya di bawah ini. Sekarang ada lingkungan di Jedi, yang membuat ini semua menjadi mudah.
Dave Halter
4

Kamu tidak bisa The :pythondan :python3perintah selalu menggunakan disusun-in penerjemah. Jika Anda memiliki versi terbaru Vim dengan pythondan / atau python3dimuat secara dinamis (lihat :h python-dynamic), Anda dapat menggunakan pythondlldan pythonthreedllmemuat penerjemah yang berbeda, tetapi mengganti CPython dengan Anaconda adalah IMO yang meminta segfault (asalkan Vim menerimanya sama sekali, yaitu).

Sato Katsura
sumber
3

2018+ Versi Jedi

Anda bisa menggunakan :let jedi#force_py_version=3.8jika Anda ingin beralih ke versi Python terbaru, misalnya. Sayangnya belum ada daftar lingkungan di jedi-vim. Kita perlu membangun itu (itu tersedia di Jedi).


Jawaban Lama

Pada dasarnya satu-satunya hal yang dapat Anda lakukan saat ini adalah mengkompilasi VIM dengan dukungan Python 3.5. Itu mungkin ide yang bodoh, tetapi berhasil.

Kalau tidak, akan ada dukungan untuk versi cross Python, dengan https://github.com/davidhalter/jedi/issues/385 .

Perhatikan bahwa dimungkinkan untuk memodifikasi Python PATH, tetapi itu mungkin mengarah ke SEGFAULT dan perilaku yang tidak diinginkan lainnya, karena pada dasarnya Anda mengizinkan Jedi untuk menjalankan kode biner dari versi Python lain (Ya, itu benar-benar terjadi).

Dave Halter
sumber
1

Anda dapat mengkompilasi vim dengan anaconda: Ya ./configure --with-features=huge --enable-pythoninterp --with-python-config-dir=~/anaconda/lib/python2.7/config/, saya ingat bahwa saya melakukan tes serupa sesudahnya dan :py import sys; print sys.pathmemberi saya hasil yang benar.

Berdasarkan penelusuran web, Anda mungkin dapat melakukan hal seperti ini (mis. Untuk 3.4):

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

maksay
sumber
1

David memiliki poin yang valid tentang intermingling Vim dengan rasa yang berbeda dari Python dan jika hard coding PYTHONPATHke Anaconda Python di .profile/ .bashrcbenar-benar mengarah ke SEG 11 dapatkah seseorang menggunakan shell alias.

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

Mungkin penyelesaian ini sudah cukup.

jay
sumber
1

Saya menggunakan vim 32bit untuk kompatibilitas dengan ekstensi lain, tetapi python 64 bit pertama di PATH saya karena alasan lain. Karenanya saya menginstal python 32 bit menggunakan conda via:

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

dan menambahkan ini ke .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 

dimana C:/Users/USER/AppData/Local/Continuum/anaconda2hasil dari panggilanconda info --base

Jthorpe
sumber