Проверка синтаксиса Python (Pylint, Prospector...), сбой с KeyError: 'repoze.who' при запуске из Vim
У меня проблема с запуском pylint изнутри vim (что нужно сделать, если вы используете синтетический плагин).
Например :!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 и создам новый virtualenv, в котором не будет ничего, кроме pylint и других средств проверки синтаксиса, то все будет работать как внутри, так и вне vim. Но если я тогда pip install repoze.who==1.0.19
в virtualenv, то сбой Pylint выше вновь появляется при запуске :!pylint --version
в VIM (но не при запуске его в моей оболочке).
Vim версии 7.4 устанавливается из пакета на Ubuntu 14.04.
1 ответ
Кажется, это проблема с repoze.who 1.0.19. pip install -U repoze.who==2.2
в virtualenv избавляется от проблемы. Странно можно тогда сделать pip install -U repoze.who==1.0.19
и понизить его, и авария в Пилинте все еще исчезла. Я никогда не понимал, что именно это вызывает, но я подозреваю, что это может быть связано с этим элементом из журнала изменений repoze.who 2.0a1: удалите ez_setup.py и зависимость от него в setup.py (поддержка распространяет),