vim 内から pylint を実行すると問題が発生します (シンタスティック プラグインを使用している場合はこれを行う必要があります)。
たとえば、次の:!pylint --version
トレースバックでクラッシュします。
Traceback (most recent call last):
File "/home/seanh/.virtualenvs/ckan/bin/pylint", line 5, in <module>
from pkg_resources import load_entry_point
File "/home/seanh/.virtualenvs/ckan/lib/python2.7/site-packages/pkg_resources.py", line 2736, in <module>
add_activation_listener(lambda dist: dist.activate())
File "/home/seanh/.virtualenvs/ckan/lib/python2.7/site-packages/pkg_resources.py", line 698, in subscribe
callback(dist)
File "/home/seanh/.virtualenvs/ckan/lib/python2.7/site-packages/pkg_resources.py", line 2736, in <lambda>
add_activation_listener(lambda dist: dist.activate())
File "/home/seanh/.virtualenvs/ckan/lib/python2.7/site-packages/pkg_resources.py", line 2274, in activate
list(map(declare_namespace, self._get_metadata('namespace_packages.txt')))
File "/home/seanh/.virtualenvs/ckan/lib/python2.7/site-packages/pkg_resources.py", line 1870, in declare_namespace
path = sys.modules[parent].__path__
KeyError: 'repoze.who'
Vim 内で実行されている同じエラープロスペクターも確認しました。
しかし、Vim の外部からエラーを再現することはできません。シェルで。シェルで Python 仮想環境をアクティブにしてから実行すると、次のようpylint --version
になります。
$ pylint --version
Warning: option include-ids is deprecated and ignored.
Warning: option symbols is deprecated and ignored.
pylint 1.3.1,
astroid 1.2.1, common 0.62.1
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2]
その後vim
、同じシェルで実行:!pylint --version
して Vim で実行すると、上記のトレースバックが表示されます。Vim を終了pylint --version
し、シェルで再度実行すると問題ありません。
vimがコマンドを実行する環境と、クラッシュを引き起こしている私のシェル環境との間に何か違うものがあるに違いありません。しかし、これを調査する方法がわからないため、vim タグを使用してこの質問をします。
repoze.who
もここに関係しています。virtualenv を破棄し、pylint とその他の構文チェッカーだけがインストールされた新しい virtualenv を作成すると、vim の内外ですべてが正常に機能します。しかし、pip install repoze.who==1.0.19
その後virtualenvで実行すると、vimで実行すると上記のpylintクラッシュが再表示されます:!pylint --version
(ただし、シェルで実行すると表示されません)。
Ubuntu 14.04 のパッケージからインストールされた Vim バージョン 7.4。