質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • Vim

    572questions

    VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

vimのpython環境構築について

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,671

tkow

score 1177

前提・実現したいこと

pyenv環境でvimのjediプラグインを適用したい。

発生している問題・エラーメッセージ

centOSにてvimをソースコードからビルドし,+python/dynと,+python3/dynを設定するところまではできたのですが,~/.pyenv/shimsにpathを通した後,jediプラグインが適用されなかったため,:py printを実行したところ,

ライブラリの関数 _PyArg_Parse_SizeT をロードできませんでした :py print 1

ライブラリの関数 PySys_SetArgv をロードできませんでした :py3 print(1)

というエラーが出て実行ができません。原因を調べてもわかりやすい記事が見つからなかったためもしこのエラーを回避する方法や,設定をこうやってやり直せばできるという手順をご存知の方いたら教えていただきたいです。vimrcの設定を載せます

vimrc

<上略>
if has('vim_starting')
set runtimepath^=~/.vim/bundle/neobundle.vim
endif
let $PATH = "~/.pyenv/shims:".$PATH
call neobundle#begin(expand('~/.vim/bundle/') )

NeoBundleLazy "lambdalisue/vim-django-support", {
  \ "autoload": {
  \   "filetypes": ["python", "python3", "djangohtml"]
  \ }}

NeoBundleFetch 'Shougo/neobundle.vim'
NeoBundle 'mattn/emmet-vim'
NeoBundle 'davidhalter/jedi-vim'
NeoBundle 'scrooloose/syntastic'
NeoBundle 'Yggdroot/indentLine'
NeoBundle 'scrooloose/nerdtree'

NeeoBundleLazy "lambdalisue/vim-pyenv", {
    \ "depends": ['davidhalter/jedi-vim'],
    \ "autoload": {
    \   "filetypes": ["python", "python3", "djangohtml"]
    \ }}

call neobundle#end()

filetype plugin indent on

NeoBundleCheck

追記

vimをbuildするときvimのソースコードをどのURLからもらってくるのがいいのか教えてもらえると嬉しいです。(現在mercurialを利用してリポジトリからcloneしています。)

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

どうも、Ubuntu にて +python/+python3 を実現している者です。
ご提示されたエラーは見たことがないため、的はずれな意見かもしれませんが

  1. --enable-shared にてコンパイルされた Python ではない => CONFIGURE_OPT="--enable-shared pyenv install 3.5.0 のようにしてやり直す
  2. --enable-shared な Python とリンクできていない => -rpath などで無理やりリンクさせてみる

のどちらかなという気がしています。もしくは OS 的に無理かもしれません(Mac OS X では双方を同時起動可能な Vim のコンパイルは諦めた経緯があります)。
詳細は http://lambdalisue.hatenablog.com/entry/2014/05/21/065845 の下の方に書いてあるので参考にしてください。

追記

vimrc を見る限りすでに紹介した記事はご存知なようですね。

ちなみに上記エラーは vimrc の設定というよりかは vim コンパイルの段階でコケている気がします。おそらく vim -u NONE した後でも :python 1 や :python3 1 が失敗するのではないでしょうか?

差し支えなければ ./configure に指定しているオプションなどと Python 関連の出力部分をお見せください。もしかしたら何かわかるかもしれません。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/02/15 20:55

    この記事を参考にさせていただいて作業していました。まさかご本人様にアドバイスいただけるとは光栄です。
    configureの設定は以下でやりました。

    ./configure --enable-multibyte --with-features=huge --enable-cscope --enable-gui=gtk2 --disable-selinux --prefix=/usr/local --enable-xim --enable-fontset --enable-gpm --with-python-config-dir=/home/vagrant/.pyenv/shims/ --enable-fail-if-missing --enable-pythoninterp=dynamic --enable-gpm --enable-acl --with-x=yes --enable-gui=gtk2 --enable-python3interp

    それに対する出力が以下です。

    checking --enable-pythoninterp argument... yes
    checking for python2... (cached) /usr/bin/python2
    checking Python version... (cached) 2.6
    checking Python is 2.3 or better... yep
    checking Python's install prefix... (cached) /usr
    checking Python's execution prefix... (cached) /usr
    (cached) checking Python's configuration directory... (cached) /home/vagrant/.pyenv/shims/
    (cached) checking if -pthread should be used... yes
    checking if compile and link flags for Python are sane... yes
    checking --enable-python3interp argument... yes
    checking for python3... (cached) /home/vagrant/.pyenv/shims/python3
    checking Python version... (cached) 3.5
    checking Python is 3.0 or better... yep
    checking Python's abiflags... (cached) m
    checking Python's install prefix... (cached) /home/vagrant/.pyenv/versions/3.5.1
    checking Python's execution prefix... (cached) /home/vagrant/.pyenv/versions/3.5.1
    (cached) checking Python's configuration directory... (cached) /home/vagrant/.pyenv/versions/3.5.1/lib/python3.5/config-3.5m
    (cached) checking if -pthread should be used... yes
    checking if compile and link flags for Python 3 are sane... yes
    checking whether we can do without RTLD_GLOBAL for Python... no
    checking whether we can do without RTLD_GLOBAL for Python3... no

    以下についてはまだ試していないので設定を確認して試してみようと思います。

    --enable-shared にてコンパイルされた Python ではない => CONFIGURE_OPT="--enable-shared pyenv install 3.5.0 のようにしてやり直す
    --enable-shared な Python とリンクできていない => -rpath などで無理やりリンクさせてみる。

    根本的に必要な設定がなんなのか漠然としかわかっていない状態なので,それが分かれば自己解決できそうな気もするのですが。。。

    キャンセル

  • 2016/02/15 21:43

    Vim で Python2/Python3 を同時利用するのに根本的に必要なことは [koron さんが述べていること](https://github.com/vim-jp/issues/issues/301#issue-10486086) につきます。そのため `--enable-shared` でコンパイルされた Python2/Python3 ではない限り同時利用は不可能かと思います。
    また `pyenv` を使って Python をコンパイルした場合はリンク可能な場所に存在しないため `-rpath` にて強制的にリンクさせる必要があると思います(最低でも自分はそうだった)。

    先のスレッドの下の方に新し目の情報が書かれているので参考になさると良いかもしれません。

    あと、これに関してはかなり記憶が曖昧ですが

    > checking whether we can do without RTLD_GLOBAL for Python... no
    checking whether we can do without RTLD_GLOBAL for Python3... no

    `-rpath` を `--enable-shared` した python に指定することで、この部分が yes となった**気がします**。記憶違いかもしれませんが……

    キャンセル

  • 2016/02/15 21:44

    コメントは Markdown じゃないのかよ!w

    キャンセル

  • 2016/02/15 21:47

    あと

    checking --enable-pythoninterp argument... yes
    checking for python2... (cached) /usr/bin/python2
    checking Python version... (cached) 2.6
    checking Python is 2.3 or better... yep
    checking Python's install prefix... (cached) /usr
    checking Python's execution prefix... (cached) /usr
    (cached) checking Python's configuration directory... (cached) /home/vagrant/.pyenv/shims/
    (cached) checking if -pthread should be used... yes

    の部分ですが、--with-python-config-dir=/home/vagrant/.pyenv/shims/ にて指定している python と /usr/bin/python2 は同じものでしょうか?もし pyenv でコンパイルしたものであれば、この段階から異なるものを指定していることになります。

    Ubuntuのもので申し訳ないですが https://gist.github.com/lambdalisue/102a1f9985b243cd0e71 が自分が利用している +python/+python3 のインストールスクリプトになるので参考にしてください。 --with-python-configure-dir は指定せずに自動で解決させたほうが良いかと思います。

    キャンセル

  • 2016/02/16 03:38

    https://gist.github.com/lambdalisue/102a1f9985b243cd0e71
    のshellスクリプトを参考に自分の環境に置き換えてビルドをやり直したところ,vimの2系3系のpython実行と, jediプラグインの動作確認ができました。この2日間隙間時間を消耗して途方に暮れていたため本当に感謝です。
    やはり,vimコンパイル時にshared-objectファイルへのリンクをしていなかったことと,使用するpythonの指定が間違っていたことが原因のようでした。
    gccの設定で利用したオプションの意味も理解できました。あとanyenvというのがあるのも知りました。
    教えていただいたshellスクリプト見るだけでめちゃくちゃ構成管理の勉強になりました。得るものが多かったです。本当にありがとうございました。

    キャンセル

  • 2016/02/20 18:13

    ;-)

    キャンセル

同じタグがついた質問を見る

  • Vim

    572questions

    VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。