2012-03-20 11 views
8

이름을 알 수없는 모듈의 멤버를 가져 오려고합니다. 대신동적으로 파이썬 모듈 가져 오기

import foo 

의 내가 사용하고 있습니다 :

__import__("foo") 

어떻게 대신에 "평가"의지의 from foo import bar 경우에 비슷한 일을 달성 할 수있다?

업데이트 : 그것은 fromlist 님의 트릭입니다. from foo import *을 에뮬레이트 할 수 있습니까? fromlist=['*'] 트릭을하지 않았다.

답변

10

에뮬레이트합니다.

def mother_function(module, *args, **kwargs): 
    from module import variable 
    return variable 

def call_home_to_mamma(): 
    import module_42 
    return mother_function(module_42) 

:

+0

+1 다른 모듈에서이 코드를 사용할 수 있도록 globals() 대신 __builtins__을 사용하고 있습니다. –

9
__import__("foo", fromlist=["bar"]) 

자세한 내용은 help(__import__)

+0

감사합니다. "foo import *에서"에뮬레이트 할 수있는 방법이 있습니까? – ustun

1

에 대한 동적 __import__의 도움으로 가져올 수 있습니다. fromlist 키 인수가 __import__ 인 경우 from foo import bar으로 전화하십시오.

foo = __import__('foo') 
for attr in dir(foo): 
    if not attr.startswith('_'): 
     globals()[attr] = getattr(foo, attr) 

을 일반적으로 눈살을 찌푸리게한다 from foo import *를 사용하고 더욱 그렇고, 내가 상상하는 것 에뮬레이션 : 가져온 모듈의 속성을 얻을 수 dir을 사용할 수 from foo import *

+0

감사합니다. "foo import *에서"에뮬레이트 할 수있는 방법이 있습니까? – ustun

0

은 때때로 당신은 당신은 단지이 작업을 수행 할 수없는 등 같은 이름의 변수에 다른 값을 가지고 각각의 여러 구성 파일 중 하나, dicts,

를 가져올 이것이 왜 작동하지 않는지에 대한 설명은 나의 급여 등급보다 높으며, 종결과 네임 스페이스를 포함한다. 내가 정말 필요로 할 때 내가 발견 근무하는 다음 dyamically 특정 변수를 가져, 문자열 인수로 '모듈 이름'을 가진 어머니의 함수를 호출하는 것이 었습니다 :

def mother_function(module_name, *args, **kwargs): 
    exec('from %s import %s' % (module_name, variable)) 
    variable = eval(variable) 
    return variable 

def call_home_to_mamma(): 
    import module_42 
    return mother_function(module_42.__name__) 

빙고를 .... 당신은 어떤 변수의 dyamic 수입이 가져온 모듈에서 런타임시 결정된대로 원하는대로 지정할 수 있습니다.