2012-05-04 3 views
13

이어야합니다. Pylint를 사용하여 모듈을 검사하고 있습니다.Pylint : 상대 가져 오기가

from entity import Entity 

하지만 Pylint는 것을 한탄 : 제품 내

/builder 
    __init__.py 
    entity.py 
    product.py 

는이 같은 개체를 가져옵니다

************* Module builder.product 
W: 5,0: Relative import 'entity', should be 'builder.entity' 

그러나 from builder.entity import Entity 패키지를 인식하지 않으며,이 프로젝트는이 구조를 가지고 from ..builder.entity import Entity도 작동하지 않습니다. Pylint는 무엇에 대해 불평하고 있습니까? 감사합니다.

답변

14

Python 2.5는 상대적 가져 오기를 도입했습니다. 그들은 당신이 할 수 있도록

from .entity import Entity 
+1

이유없이 -1 통어서 고맙습니다. – glglgl

+3

"충분히 새로운"이란 무엇입니까? – PlasmaBinturong

+0

@PlasmaBinturong "new enough"은 Python 2.5에서 상대 import를 도입 한 것입니다. – glglgl

0

더 새로운 파이썬 버전이 있다면 glglgl의 대답은 정확합니다.

그러나 확인하지 않은 경우 유효성 검사중인 패키지가 PYTHONPATH에 있는지 확인해야합니다. 아래 예제를 참조하십시오.

[sebastian ~/tmp/testpy]$ pylint -r n a.py 
************* Module a 
C: 1: Missing docstring 
F: 1: Unable to import 'testpy.b' 
[sebastian ~/tmp/testpy]$ PYTHONPATH=".." pylint -r n a.py 
************* Module a 
C: 1: Missing docstring 
+0

나는 __init__.py을 가지고 있는데, 지적 해 주셔서 고마워. 내 질문을 편집했다. – pistacchio

0

당신이 product.py의 맨 위에 다음 줄을 포함하는 경우는 어떻게해야합니까 :

import builder 
print builder 

내 생각 엔 당신이 어떤 장소에서 다른 모듈/패키지 builder를 가져 오는 것입니다 귀하의 당신이 사용하기 전에 PYTHONPATH.

6

__init__.py 파일은 코드가 패키지 (즉, "빌더")라고 생각합니다.

따라서 "pylint가 엔티티 가져 오기 엔티티"를 볼 때 암시 적으로 상대 가져 오기로 제대로 감지합니다 (다른 포스터가 광고 한 것처럼 파이썬 2.6 이후 '.'을 사용하여 명시 적 상대 가져 오기를 수행 할 수 있음).

"builder.entity import entity"가 작동하지 않으면 "PYTHONPATH pb"입니다. "builder"디렉토리가있는 디렉토리가 PYTHONPATH에 있는지 확인하십시오 (gurney alex가 제안한 대체 pb). 패키지를 작성하지 않으려는 경우가 아니라면 __init__.py를 제거하는 것이 좋습니다.

관련 문제