2011-09-29 7 views
0

소켓에서 수신 대기하는 서버를 만들고 있습니다. 새 요청이 들어올 때마다 서버는 handle_request의 새 인스턴스를 생성합니다. handle_request.py 의 각 인스턴스는 관련 처리기을 request_handlers에서 가져옵니다. handlerX는 모듈이지만디렉토리에서 패키지를 동적으로 가져옵니다.

server.py 
handle_request.py 
request_handlers 
|_handler_beta 
|_handler_1 
|_handler_2 

는 request_handlers은 패키지 아니다. 모듈은 자체 포함되어 있으며 각 요청마다 다시로드됩니다. 프로그램이 실행되는 동안 모듈이 추가, 수정 또는 삭제 될 수 있습니다.


질문 : 임의의 디렉토리에서 모듈을 가져올 수있는 방법은 무엇입니까? "폴더에서 모듈을 가져 파이썬은"


내 숙제를하고, 나는 대부분의 질문도 하나의 제목은, 패키지 다루는 것을 보았다. 그러므로 나는이 질문이 뚜렷하다고 믿는다. 아키텍처가 단순화되었습니다. 예, 파일 수정에 대한 재로드로 사전 포킹을 고려 중입니다.

답변

2

디렉토리에 __init__.py을 만듭니다. 그것은 그것을 패키지로 만듭니다. 디렉토리에서 .py 파일을 검색하는 경우 __init__.py을 건너 뛰고 싶을 것입니다.

그런 다음 __import__('request_handlers.' + module, fromlist=[''])으로 가져올 수 있습니다 (목록이 중요합니다. 그렇지 않으면 적절한 모듈이 아닌 request_handlers이됩니다).

__init__.py없이이 작업을 수행하는 한 가지 방법은 request_handlers 디렉토리를 sys.path에 넣는 것이지만 다른 모듈과의 이름 충돌을 가능하게합니다. 또 다른 방법은 execfile입니다. 당신이 원한다면 더 많이 연구 할 수 있습니다. 나는 패키지/__ import__ 방법으로 그것을 할 것이다.

+0

default_handler를 가져 오는 __import __ ('request_handlers.default_handler', fromlist = [ ''])를 시도했지만 그 속성 중 NONE 없음 – aitchnyu

+0

"NONE of its attributes"는 무엇을 의미합니까? 모듈에 무엇이든있는 모듈 객체를 얻습니다. –

+0

>>> request_handlers.default_handler as dh >>> dir (dh) [ '__ builtins__', '__ doc__', '__ file__', '__ name__', '__ package__', '__ path__'] – aitchnyu

0

Chris가 말한대로 : __init__.py을 폴더에 추가하십시오. 미리 이름을 모르거나 코드에서 이름을 수정하지 않으려면 __import__() 함수를 사용할 수 있습니다.

관련 문제