2016-11-27 3 views
2

파이썬에서는 dynamically import an entire module using importlib.import_module(name)이 가능하며 지정된 패키지 또는 모듈 (예 : pkg.mod)을 반환합니다. 그러나 특정 기능/클래스/등을 동적으로 가져 오는 유사한 방법이 없습니다. 주어진 모듈로부터, 예를 들어, 당신은이Python의 동적 동등 물 "<module>에서 가져 오기 <symbol>"

Traceback (most recent call last): 
    File "/home/stackoverflow/dev/importtest.py", line 6, in <module> 
    symbol = importlib.import_module("basename", "os.path.basename") 
    File "/usr/lib/python3.5/importlib/__init__.py", line 126, in import_module 
    return _bootstrap._gcd_import(name[level:], package, level) 
    File "<frozen importlib._bootstrap>", line 986, in _gcd_import 
    File "<frozen importlib._bootstrap>", line 969, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 956, in _find_and_load_unlocked 
ImportError: No module named 'basename' 
+0

'itertools'가'import_module이 없습니다에게()'에 액세스하려면 다음과 같이 뭔가를 시도 할 수 있습니다. 당신이 언급 한 링크는'importlib.import_module'을 대신 포함합니다. – ettanany

+0

감사합니다. 오타가 수정되었습니다. 내가 그걸 어떻게 관리했는지 모르겠다. – errantlinguist

답변

3

: 내가 직접 importlib.import_module(symbol_name)를 사용하여 기호를 가져 오려고하면 from foo import bar, where the symbol bar of the module foo is imported into the symbol table of the importing module?

예를 들어, 난 그냥 위의 코드를 다음과 같은 스택 트레이스를 출력 실행하는 ImportError:

import importlib 

# Importing an entire module works fine 
imported_module = importlib.import_module("os.path") 
# This doesn't work 
imported_symbol = importlib.import_module("os.path.basename") 

를 얻을 수 getattr을 사용하여 import_module에 의해 반환 된 모듈 개체에서 필요한 기호를 찾으려면

imported_module = importlib.import_module("os.path") 
imported_symbol = getattr(imported_module, "basename") 
1

import_module 메서드 만 모듈을 수락합니다.

당신은 모듈의 방법/속성

imported_symbol = importlib.import_module("os.path").basename