我在从 vim 内部运行 pylint 时遇到问题(如果您使用的是syntastic插件,则需要这样做)。
例如:!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]
如果我然后vim
在同一个 shell 中运行并:!pylint --version
在 Vim 中运行,我会得到上面的回溯。退出 Vim 并pylint --version
再次在 shell 中运行就可以了。
vim 运行命令的环境和我的 shell 环境之间一定有什么不同,这会触发崩溃。但我不知道如何调查这个问题,因此这个问题带有 vim 标签。
repoze.who
这里也有牵连。如果我销毁我的 virtualenv 并创建一个新的 virtualenv,其中只安装了 pylint 和其他语法检查器,那么 vim 内部和外部的一切都正常。但是,如果我然后pip install repoze.who==1.0.19
在 virtualenv 中,那么上面的 pylint 崩溃会:!pylint --version
在 vim 中运行时重新出现(但在我的 shell 中运行时不会)。
Vim 7.4 版从 Ubuntu 14.04 上的软件包安装。