2011-05-12 8 views
3

파이썬 모듈을 import module 또는 from module import *으로 가져 왔는지 감지 할 수 있습니까? 예 :Python 가져 오기 유형 감지

if __something__=='something': 
     print 'Directly imported with "import ' + __name__ + '"' 
else: 
     print 'Imported with "from ' + __name__ + ' import *"' 

감사합니다.

+6

이 소리에 의존해야하는 것은 매우 파손되었습니다. –

+0

난 그냥 궁금해서 =) – Emilio

답변

4

아니요, 모듈의 코드 내에서이를 감지 할 수 없습니다. 첫 번째 가져 오기를 수행하면 모듈 본문이 실행되고 sys.modules에 새 모듈 객체가 삽입됩니다. 이 후에 만 ​​요청한 이름이 가져 오기 모듈의 네임 스페이스에 삽입됩니다.

나중에 가져 오면 모듈 본문이 실행되지 않습니다. 모듈이 처음

from module import name 

import module 

와 두 번째로 가져 그래서 만약이 두 번째 가져 오는 동안 전혀 아무것도 할 기회가 없습니다. 특히 수입 방법을 확인할 수 없습니다.

0

Svens 응답은 아마도 올바른 것이고 이것은 약간 분명한 것처럼 보일 수 있지만,이 질문에 비틀 거리면 정말 찾고 있었던 것입니다.

이 모듈은 최소한 입력 인수를 전달한 것입니다. while은 단위 테스트없이이 특정 스크립트의 단위 테스트를 가져온 모듈에서 수행 할 수 있습니다.

import sys 

def myfunction(blah): 
    return "something like: " + blah 

noargs=len(sys.argv) 
if noargs>1: 
    for i in range(noargs-1): 
     print myfunction(sys.argv[i+1]) 

그러나 입력 인수가 없다면 Emilio는 도움이되지 않습니다. :)