我在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外部复制错误。在一个壳里。如果我在shell中激活我的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]
如果我在同一个shell中运行vim
,并在Vim中执行:!pylint --version
,我会得到上面的回溯。退出Vim,再次在shell中运行pylint --version
,一切正常。
vim运行命令的环境和我的shell环境之间一定有什么不同,也就是触发崩溃。但我不知道如何调查这一点,因此这个问题与vim标签。
CCD_ 6也与此有关。如果我破坏了我的virtualenv,创建了一个新的virtualenv,里面只安装了pylint和其他语法检查器,那么vim内外的一切都很好。但是,如果我在virtualenv中运行pip install repoze.who==1.0.19
,那么当在vim中运行:!pylint --version
时(但在我的shell中运行它时不会),会再次出现上面的pylint崩溃。
Vim 7.4版从Ubuntu 14.04上的软件包安装。
这似乎是repoze.who 1.0.19的一个问题。虚拟机中的pip install -U repoze.who==2.2
解决了这个问题。奇怪的是,你可以执行pip install -U repoze.who==1.0.19
并将其降级,而pylint崩溃仍然没有发生。我从来没有弄清楚到底是什么导致了它,但我怀疑这可能与repoze.who 2.0a1变更日志中的这一项有关:在setup.py中删除ez_setup.py和对它的依赖(support-distribute)。