2013-12-12 1 views
2

예를 들어 현재 모듈을 가져오고 싶습니다. 다시로드, 내가 할 것 :현재 파이썬 모듈 객체 가져 오기 (이름 또는 다른 방법으로)

import sys 
sys.modules[__name__] 

(예를 들어 __name__을 포함하지 않음)이 작업을 수행 할 수있는 더 나은 방법이 있나요? 이 문맥에서 더 나은 것은 관용적이고, 이식성 있고, 견고하며, 또는 우리가 일반적으로 소프트웨어에서 바라는 다른 것들을 의미합니다.

저는 파이썬 2를 사용하지만, 파이썬 3에 대한 대답은 의심 할 여지없이 다른 사람들에게 유용 할 것입니다.

+4

아니요, 'sys.modules [__ 이름 __]'은 * 정확히 * 적합합니다. –

+1

'__name__'과 관련된 모든 알려진 트랩/문제점을 설명하고 [왜 PEP 395] (http://www.python.org/dev/peps/pep-0395/)를 읽어보고 그 이유를 설명하고 싶을 수도 있습니다 파이썬에서 오늘날과 같이 피할 수있는 더 좋은 대안은 없습니다 (3.4 - 물론 그것은 2.7의 경우에도 마찬가지입니다). (제목에도 불구하고'__main__'을 만들기위한 특별한 메타 패스 훅 (hook)과 실제 모듈 이름이 동등한 동작을하는 것처럼 '__qualname__'을 추가하는 것뿐만 아니라 몇 가지 관련 변경 사항을 제안했습니다. – abarnert

+0

@abarnert 매우 유용합니다. – Marcin

답변

3

sys.modules에서 현재 모듈 객체를 가져 오는 더 이상 관용적 인 방법이 없습니다.

__name__은 본질적으로하고, 수입에 파이썬으로 설정됩니다

module_object = import_py_file(import_name) 
module_object.__name__ = import_name 
sys.modules[import_name] = module_object 

그래서 __name__ 참조는 여기에 사용하고 싶은 정확히입니다.