jedi-vimが使用するPythonインタープリターを変更する方法


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取得したjedi-vimに追加します。
joelostblom

5
あなたはそれをすべきではありません。それはSEGFAULTにつながる可能性があります。それは危険です。
Dave Halter 2016

@DaveHalter SEGFAULTにつながる可能性があると言ったとき、回答で提案されたもの、または前のコメントで提案されたものを参照していましたか?また、SEGFAULTが発生する理由を知っていますか?
Jack Kinsella

1
@JackKinsella Pythonのバージョンは一致する必要があります。一致しない場合、コンパイルされたモジュールがインポートされるときに、異なるバージョンをロードします。ただし、以下の回答を更新しました。Jediには、これを簡単に実現できる環境があります。
Dave Halter、

4

できません。:pythonそして:python3、コマンドは常にコンパイル時に通訳を使用しています。Vimの最新バージョンが動的に読み込まれているpython、またはpython3読み込まれている:h python-dynamic場合(を参照)、を使用pythondllpythonthreedllてさまざまなインタープリターを読み込むことができますが、CPythonをAnacondaで置き換えるとIMOがsegfaultを要求します(Vimがそれを受け入れる場合)。


3

2018+ Jediバージョン

:let jedi#force_py_version=3.8たとえば、最新のPythonバージョンに切り替える場合にのみ使用できます。残念ながら、jedi-vimにはまだ環境リストがありません。これをビルドする必要があります(ただし、Jediで使用できます)。


古い答え

基本的に、現在できることは、Python 3.5をサポートするVIMをコンパイルすることだけです。それはおそらく愚かな考えですが、それはうまくいきます。

それ以外の場合は、https://github.com/davidhalter/jedi/issues/385を使用したクロスPythonバージョンがサポートされます

Python PATHを変更することは可能かもしれませんが、基本的にJediに別のPythonバージョンからのバイナリコードの実行を許可しているため、SEGFAULTやその他の望ましくない動作を引き起こす可能性があることに注意してください(実際に起こります)。


1

anacondaを使用して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

デビッドは、Pythonの異なる味でVimを混在し、ハード場合コーディングに関する有効なポイントがあるPYTHONPATH中でアナコンダのPythonに.profile/ .bashrc本当にSEG 11とリードを行い1は、シェルのエイリアスを使用することができます。

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

おそらくこの回避策で十分でしょう。


1

他の拡張機能との互換性のために32ビットvimを使用していますが、他の理由により、64ビットpythonが最初に私のPATHにあります。したがって、conda使用して32ビットのpythonをインストールしました。

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

これをmyに追加しました.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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.