2017-11-16 3 views
1

각 웹 응용 프로그램 핸들러를 지정하는 모듈과 각 라우터를 지정하는 모듈이있는 프로그램이 있습니다.
내가 사용하는 라이브러리는 here입니다. webapp.service에서데코레이터를 호출하는로드 모듈

발췌 (더 같은 모듈이 있습니다) :


webapp.router

from webapp.router import ROUTER 

@ROUTER.route('/service/[id:int]') 
class ServicePermissions(AuthenticatedService): 
    """Handles service permissions.""" 

    NODE = 'services' 
    NAME = 'services manager' 
    DESCRIPTION = 'Manages services permissions' 
    PROMOTE = False 
가 :

ROUTER = Router() 

나는 webapp.router 모듈을 가져 오십시오 webapp.service 모듈은 분명 실행되지 않습니다. 따라서 @ROUTER.route('/service/[id:int]') 데코레이터가 실행되지 않고 해당 웹 응용 프로그램이 해당 경로와 함께 사용할 수 없다는 메시지와 함께 실패합니다.

webapp.service의 코드를 실행하여 데코레이터를 "실행"하는 것이 가장 좋은 방법은 무엇입니까? 모듈 자체 나 멤버를 가져올 필요가 없습니다.

+1

으로 메인 모듈에 전화 :

당신은 같은 기능을 사용할 수 있습니다. 그것이 코드를 실행하는 유일한 방법입니다. –

+0

_ "webapp.router 모듈을 가져 오면 webapp.service 모듈이 실행되지 않습니다." 그게 어떻게 명백한가요? 모듈을 가져 오면 코드 실행이 중단됩니까? 왜 그런 경우가 있을까요? 나는 그 문제를 전혀 이해하지 못한다. –

+0

@DanielRoseman 그러나 그런데 어떤 linter는 사용하지 않는 수입품에 관하여 불평 할 것이다. 더 우아한 방법이 있습니까? –

답변

1

질문에 언급 된대로 모듈을 가져 오기만하면됩니다. 린터 불만은 문제가 적습니다. 린 터는 도움이 될 것입니다 - 그들이 방해가되면 그냥 듣지 마세요.

여러분의 앱을 구성하는 간단한 방법은 __main__.py 또는 __init__.py의 끝에 앱 구성에 따라 뷰 데코레이터를 사용하는 모든 모듈을 명시 적으로 가져 오는 것입니다.

린터가있는 경우 가져 오기 라인에서 소리를 없애는 방법을 확인하십시오. 대개 가져 오기 라인에 특별한 코멘트를 사용하여 수행됩니다.

파이썬의 인트로 스펙 션은 환상적이지만 클래스 나 인스턴스의 하위 클래스는 가져올 수없는 모듈에 정의되어 있으면 찾을 수 없습니다. 이러한 모듈은 데이터와 마찬가지로 디스크에있는 텍스트 파일 일뿐입니다 파일.

일부 프레임 워크는 접근 방식으로 프로젝트 폴더의 모든 "py"파일을 자동으로 가져 오는 "검색"유틸리티를 제공합니다. 그렇게하면 명시적인 수입 없이도 당신의 견해가 "존재하게 될"수 있습니다. 정말 모듈 자체를 가져와야 * 예 *이 할

import os 

def discover(caller_file): 
    caller_folder = os.path.dirname(caller_file) 
    for current, folders, files in os.walk(caller_folder): 
     if current == "__pycache__": 
      continue 
     for file in files: 
      if file.endswith(".py"): 
       __import__(os.path.join(current, file)) 

그리고 discover(__file__)

관련 문제