pip를 사용하여 누락 된 모듈을 자동으로 설치하는 가져 오기 훅을 구현 중입니다.가져 오기 후크에서 전체 모듈 이름 가져 오기
지금까지 간단한 모듈 (단 하나의 레벨 만 사용) (예 : unipath
)로는 정상적으로 작동합니다. 그러나 zope.interface
과 같이 다단계 가져 오기를 사용하려고하면 가져 오기 프로그램은 첫 번째 부분 (zope
) 만 가져옵니다. 따라서 zope
은 PyPI에 존재하지 않으므로 실패하게됩니다.
가져올 때 전체 모듈 이름을 얻는 방법에 대한 아이디어가 있으십니까? 여기에 몇 가지 코드
:class PipLoader(object):
def __init__(self):
self.module = None
def find_module(self, name, path):
print "Will install module {}".format(name)
self.module = None
sys.meta_path.remove(self)
try:
pip_install(name)
self.module = importlib.import_module(name)
finally:
sys.meta_path.append(self)
return self
def load_module(self, name):
if not self.module:
raise ImportError("Unable to load module")
module = self.module
sys.modules[name] = module
return module
def install():
sys.meta_path.append(PipLoader())
끔찍한 생각입니다. 자동 설치하지 마십시오. 버전 비 호환성이 있다면? –
@MartijnPieters 걱정 마세요! 나머지 응용 프로그램이 훨씬 안전하지 않다는 것을 확신합니다. P 재미있는 것입니다. –
'__import__'를 바꾸면 모듈의 전역 변수와 더 많은 정보를 얻을 수 있습니다. – User