1

我在从 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 上的软件包安装。

4

1 回答 1

0

这似乎是 repoze.who 1.0.19 的问题。pip install -U repoze.who==2.2在 virtualenv 中摆脱了这个问题。奇怪的是,你可以这样做pip install -U repoze.who==1.0.19并降级它,而 pylint 崩溃仍然消失了。我从来没有深入了解究竟是什么原因造成的,但我怀疑这可能与 repoze.who 2.0a1 更改日志中的这个项目有关:删除 ez_setup.py 并在 setup.py 中依赖它(支持分发) .

于 2014-11-10T10:14:57.320 回答