2013-02-07 5 views
0

동적으로 모듈을 가져 와서 클래스를 생성해야합니다.
이 파이썬 3.2에서 내 작업 코드 :파이썬에서 동적 모듈 가져 오기 (코드 3.2에서 3.3까지)

klass = {} 
mod = __import__('sites.' + self.className + '_login', fromlist=[self.className]) 
klass[self.className] = getattr(mod, self.className) 
klass[self.className](**self.args) 

모듈은 "사이트"폴더 안에 있습니다. 그것은 my_site_login이고 그 모듈 "my_site"내의 클래스입니다.

파이썬 3.3으로 업그레이드 한 이후 코드가 작동을 멈췄습니다. 나는 importlib.import_module에 의해 _____import_____가 대체되었다고 읽었습니다. 나는 그것을하기 위해 몇 가지 방법을 시도했지만 그것이 작동하도록 할 수는 없다.

이것은 내가 뭘하려 :
https://stackoverflow.com/a/8790051/1095101

mod = getattr(import_module('sites.' + self.className + '_login'), self.className) 

내가 해봤 다른 일을 기억 할 수 없다. 내가 말할 수있는 것은, 수입 시도 직후에 넣은 print() 중 아무 것도 보여주지 않았다는 것입니다. 오류 메시지가 표시되지 않습니다. 그것은 단지 주목할 만하다.

죄송합니다. 여러 번 답변을 드렸지만 모든 것을 시도했지만 아무런 효과가 없었습니다. 나는 더 이상 생각할 수 없다. 고맙습니다.

답변

1

당신은 이것을 재구성하고 싶습니다; sites 패키지 __init__.py 파일의 경우 모두 모듈을 가져 와서 동적으로 가져와야합니다. 이 잘 작동

importlib 

mod = importlib.import_module('sites.{}_login'.format(self.className)) 
klass[self.className] = getattr(mod, self.className) 
klass[self.className](**self.args) 

대화 형 명령에서 프롬프트 : 당신의 my_site_login.py 모듈이 동적으로 생성하는 경우

import sites 

mod = getattr(sites, self.className + '_login') 
klass[self.className] = getattr(mod, self.className) 
klass[self.className](**self.args) 

importlib.import_module() 호출 작품을 아주 간단하게는 :

그럼 그냥 대신 액세스 속성 사용

>>> import importlib 
>>> importlib.import_module('sites.my_site_login') 
<module 'sites.my_site_login' from './sites/my_site_login.py'> 

n Python 2.7, 3.2 및 3.3.

+0

좋아 ... 이것은 당황 스럽다. 코드가 내가 시도한 코드 였으므로 뭔가 잘못되었습니다. 문제는 모듈의 새로운 문서화 문자열에 있습니다. utf-8 선언은 없었고 일부 문자는 모든 것을 엉망으로 만들었습니다. 어쨌든 두 번째 코드를 사용 하겠지만, 동적으로 생성됩니다. 감사. –