2016-12-20 4 views
2

파이썬에서는 패키지의 모듈에서 클래스를 가져와야합니다. 디렉토리에 앱을 설치하여 소스 코드를 편집하지 않고 프로그램을 확장 가능하게하려고합니다. 예를 들어, 나는 다음과 같은 디렉토리 구조를 가지고 : 모두 a.pyb.py에서모듈에서 동적 클래스 가져 오기

Project/ 
    apps/ 
     __init__.py 
     a.py 
     b.py 
    main.py 

을, 클래스가 모두 함께 main.py에 있었던 것처럼 내가 main.py로 직접 가져 싶은 클래스있을 것입니다. 나는이 애플 리케이션의 이름이나 그 안에있는 클래스를 모른다. 이것을 할 수있는 방법이 있습니까?

나는 또한 아무 소용이없는 대답을 찾아 봤다.

EDIT. 동적 인 가져 오기가 필요하다는 것을 설명하는 것을 잊어 버렸습니다. 문제를 일으켜서 미안 해요. main.py

import apps.a 
import apps.b 

apps.a.MyClassA 
apps.b.MyClassB 

에서 나는이 일을해야한다고 생각

+0

https://docs.python.org/3/tutorial/modules.html#packages – wwii

+0

당신이 그들이 동적해야 의미합니까? 조건부로 런타임에 물건을 가져 오시겠습니까? 보고 (importlib) (https://docs.python.org/3/library/importlib.html) 보셨습니까? – wwii

답변

1

친구의 도움으로 해결했습니다. 의견을 보내 주셔서 감사합니다.

import importlib.machinery 
import os 
for module in os.listdir(apps_dir)[2:]: 
    temp = importlib.machinery.SourceFileLoader(module, 'apps/' + module).load_module() 
    globals().update(temp.__dict__) 
0

, 또는 선택적으로 할 수도 있습니다

from apps.a import MyClassA 
from apps.b import MyClassB 
0

그냥 (main.py에서) 다음의 주요 네임 스페이스의 클래스를 원하는 경우 :

from .apps.a import ClassA 
from .apps.b import ClassB 

__init__.py 파일을 넣어야합니다.디렉토리도 있습니다.

관련 문제