pyenvもpipenvもanacondaも全てに対応。鉄の意志で。

やること

今のシェルで呼び出せるpythonを補完する設定です。
~/.vim/ftplugin/python.vim
をこうしました。

pythonx << EOF
import subprocess
import sys
path = subprocess.run(['python','-c','import site; print(site.getsitepackages()[0])'],
                      stdout=subprocess.PIPE).stdout
path = path.strip()
path = path.decode('utf-8')
path = str(path)

if not path in sys.path:
    sys.path.append(path)
EOF

解説

最近のpythonではシェルを使うにはsubprocessモジュールのrun()を使うのが良いらしいです。

run()は第一変数にコマンドラインをスペースで分けたリストを放り込めば良いようです。
で、結果を取得したい場合はstdout=subprocess.PIPEというのをつけねばならぬらしい。
返り値はsubprocessモジュールで定義されたオブジェクトで、
その中のstdoutという変数に結果が格納されるようです。
文字列には改行文字が含まれていたりするのでstripで取り除いてあげます。
文字列はバイトの文字列なので、utf-8にデコードしてあげないといけません。

クソ面倒くさくね(´・ω・`)?

でもまぁ、これでどんなpythonの環境でもjediの力が及ぶわけです。
フォースとともにあらんことを。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.