2014-11-07 7 views
0

vim에서 pylint를 실행하는 데 문제가 있습니다 (사용중인 경우 수행해야 할 문제). syntastic 플러그인). 이 역 추적에Python 구문 검사기 (Pylint, Prospector ...)가 KeyError와 충돌 함 : Vim 내부에서 실행할 때 'repoze.who'

예를 들어 :!pylint --version 충돌 : 나는 또한 빔 내에서 실행되는 동일한 오류 prospector 본 적이

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 외부에서 오류를 재현 할 수 없습니다. 껍질에. 내가 쉘 내 파이썬 가상 환경을 활성화한다면 내가 할 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을 끝내고 pylint --version을 쉘에서 다시 실행하면된다.

vim이 명령을 실행하는 환경과 충돌을 유발하는 내 셸 환경 간에는 다른 무언가가 있어야합니다. 그러나 나는 이것을 조사하는 방법을 모른다. 그러므로 vim 태그로이 질문을한다.

repoze.who도 여기에 관련됩니다. 내 virtualenv를 파괴하고 pylint와 다른 구문 검사기 만있는 새로운 virtualenv를 만들면 모든 것이 vim의 내부와 외부에서 모두 잘 작동합니다. 그러나 만약 내가 pip install repoze.who==1.0.19 virtualenv 다음에 위의 pylint 충돌은 vim에서 :!pylint --version을 실행할 때 다시 나타납니다 (그러나 내 셸에서는 실행하지 않습니다).

Vim 버전 7.4가 Ubuntu 14.04의 패키지에서 설치되었습니다.

답변

0

이것은 repoze.who 1.0.19의 문제인 것으로 보입니다. virtualenv의 pip install -U repoze.who==2.2은 문제를 제거합니다. 그런 다음 이상하게도 pip install -U repoze.who==1.0.19을 다운 그레이드 할 수 있으며, 필 린트 크래시는 여전히 사라집니다. 나는 그것을 정확히 일으키는 것의 바닥에 결코 갈 수는 없지만, repoze.who 2.0a1의 changelog에서이 항목과 관련이 있을지도 모른다고 생각됩니다 : ez_setup.py를 제거하고 setup.py (의존성 배포) .