Làm thế nào để thay đổi trình thông dịch python được sử dụng bởi jedi-vim


10

Tôi có Anaconda(bao gồm python3.5.2), VIM(7.4) và Jedi-VIMđược cài đặt trên hệ thống của tôi. pythonTheo mặc định, cũng có một cài đặt trên hệ thống linux.

Tự động hoàn thành đang làm việc trên các gói cơ sở, ít nhất. Nhưng đối với các gói như numpy(được bao gồm trong Anaconda) thì việc hoàn thành không hoạt động.

Bằng cách sử dụng lệnh sau trong 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_']

Điều này cho tôi biết rằng trình Anaconda-pythonthông dịch và các gói không bao giờ được sử dụng bởi jedi-vim.

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

Làm cách nào tôi có thể khiến jedi-vim sử dụng đường dẫn của trăn anaconda để tự động hoàn thành gói?

Câu trả lời:


8

Tôi đã có thể tự sửa nó bằng cách cung cấp jedi-vimvị trí của các gói trong anacondathư mục của mình bằng cách sử dụng $PYTHONPATHbiến như sau:

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

Cảm ơn tất cả!

Hoặc Thêm dòng sau vào ~ / .bash_profile

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


Cảm ơn! Thêm export PYTHONPATH="/home/user-name/anaconda3/lib/python3.5/site-packages":$PYTHONPATHvào ~/.zshrcjedi-vim của tôi để hoạt động chính xác với anaconda.
joelostblom

5
Bạn không nên làm điều đó. Điều đó có thể dẫn đến một SEGFAULT. Nguy hiểm.
Dave Halter

@DaveHalter Khi bạn nói nó có thể dẫn đến SEGFAULT, bạn đã đề cập đến những gì được đề xuất trong câu trả lời hoặc những gì được đề xuất trong bình luận trước? Ngoài ra, bạn có biết tại sao SEGFAULT có thể xảy ra không?
Jack Kinsella

1
@JackKinsella Các phiên bản Python cần khớp, nếu không, khi các mô-đun được biên dịch được nhập, bạn tải các phiên bản khác nhau. Tuy nhiên tôi đã cập nhật câu trả lời của tôi dưới đây. Hiện tại có các môi trường trong Jedi, điều này làm cho tất cả điều này trở nên dễ dàng.
Dave Halter

4

Bạn không thể. Các lệnh :python:python3luôn luôn sử dụng các trình thông dịch được biên dịch. Nếu bạn có phiên bản gần đây của Vim với pythonvà / hoặc được python3tải động (xem :h python-dynamic), bạn có thể sử dụng pythondllpythonthreedlltải các trình thông dịch khác nhau, nhưng thay thế CPython bằng Anaconda là IMO yêu cầu segfaults (với điều kiện là Vim chấp nhận nó).


3

Phiên bản Jedi 2018+

Bạn chỉ có thể sử dụng :let jedi#force_py_version=3.8nếu bạn muốn chuyển sang phiên bản Python mới nhất chẳng hạn. Thật không may, không có danh sách môi trường trong jedi-vim, chưa. Chúng ta cần xây dựng nó (mặc dù nó có sẵn trong Jedi).


Câu trả lời cũ

Về cơ bản, điều duy nhất bạn có thể làm hiện tại là biên dịch VIM với hỗ trợ Python 3.5. Đó có lẽ là một ý tưởng ngu ngốc, nhưng nó hoạt động.

Nếu không, sẽ có hỗ trợ cho các phiên bản Python chéo, với https://github.com/davidhalter/jedi/issues/385 .

Lưu ý rằng có thể sửa đổi Python PATH, nhưng điều đó có thể dẫn đến SEGFAULT và hành vi không mong muốn khác, vì về cơ bản bạn đang cho phép Jedi chạy mã nhị phân từ một phiên bản Python khác (Có thực sự nó xảy ra).


1

Bạn có thể biên dịch vim với anaconda: Tôi đã làm ./configure --with-features=huge --enable-pythoninterp --with-python-config-dir=~/anaconda/lib/python2.7/config/, tôi nhớ rằng tôi đã làm các bài kiểm tra tương tự sau đó và :py import sys; print sys.pathđã cho tôi kết quả chính xác.

Dựa trên tìm kiếm trên web, bạn có thể có thể làm một cái gì đó như thế này (ví dụ: 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 có một điểm hợp lệ về việc kết hợp Vim với các hương vị khác nhau của Python và nếu mã hóa cứng PYTHONPATHcho Anaconda Python trong .profile/ .bashrcthực sự dẫn đến SEG 11, người ta có thể sử dụng bí danh vỏ.

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

Có lẽ công việc này sẽ đủ.


1

Tôi đang sử dụng vim 32 bit để tương thích với các tiện ích mở rộng khác, nhưng python 64 bit lần đầu tiên xuất hiện trên PATH của tôi vì những lý do khác. Do đó tôi đã cài đặt python 32 bit bằng conda qua:

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

và thêm nó vào .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 

nơi C:/Users/USER/AppData/Local/Continuum/anaconda2là kết quả của sự kêu gọiconda info --base

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.