1

CPython C API를 사용하여 Python 파일을 C 응용 프로그램의 플러그인으로로드하려고합니다. 이러한 Python 파일에는 클래스 및 기타 항목이 포함되어 있으며 일단 모듈 객체를 얻으면이를 얻는 방법을 알고 있습니다.importlib : 모듈 이름을 신경 쓰지 않고 여러 개의 Python 파일을 가져 오는 방법

import importlib 

module = importlib.machinery.SourceFileLoader('some_module', '/path/to/file.py').load_module() 

내가 C의 API와 해당 작업을 수행 할 수 있습니다

내가 파이썬 파일을 가져오고 모듈 개체를 가져가 현재의 솔루션이 (파이썬 3)입니다.

내가 이해하는 것은 모듈 객체가 some_module 키를 사용하여 sys.modules 사전에 추가된다는 것입니다.

내 문제는 두 번째 모듈을로드하고 모듈 이름으로 some_module을 지정하면 두 번째 모듈에서 발견 된 이름이 첫 번째 모듈과 동일한로드 된 모듈에 추가되고 기존 이름을 덮어 씁니다. 즉,이 경우입니다 :

import importlib 

module = importlib.machinery.SourceFileLoader('some_module', '/path/to/file.py').load_module() 
module2 = importlib.machinery.SourceFileLoader('some_module', '/path/to/file2.py').load_module() 

modulemodule2 실제로 같은 객체. 내 경우에는 두 플러그인이 동일한 전역 이름을 가질 수 있기 때문에 이것은 나쁘다.

내 응용 프로그램 사용자는 플러그인 파일을로드 할 경로 목록을 지정할 수 있으므로 Python 파일을 다른 위치에 배치 할 수 있으며 두 개의 다른 플러그인이 동일한 기본 이름을 가질 수 있음을 의미합니다.

경로를 통해 고유 한 모듈 이름을 만드는 유일한 방법입니까? 그런 다음 마지막 예제가된다 :

import importlib 

module = importlib.machinery.SourceFileLoader('path_to_file', '/path/to/file.py').load_module() 
module2 = importlib.machinery.SourceFileLoader('path_to_file2', '/path/to/file2.py').load_module() 

가져 오는 실제 모듈 이름에 대한 하지 관리 어떤 방법이 있나요?

+0

),하지만 여러 곳에서 로딩을 허용하면 이것이 불가능하다고 생각합니다. 모듈 사이에 의존성이 있습니까? 예 : "/path/to/file.py"가져 오기 "/path/to/file2.py"? 참고로,이 경우는 작동 불가능합니다 :-) – mkiever

답변

0

모듈 가져 오기를 위해 모듈 (플러그인)을 동시에 버전화할 수 있습니다. 또 다른 방법은 모듈이 있고 그들을 정렬 (일종의 워크 플로우 패턴)하고 존재하는 경우 중복을 제거하는 곳입니다. 일반적으로 수입 기계는 당신이 원하는 것을 신경 쓰지 않아야합니다! 마이크로 패턴이며 로딩을 위해 하네스를 준비한다고 가정합니다. 나는 위의 모든 응용 프로그램에서 위의 사실을 사랑한다. 나는 원하는 모든 것을로드 할 수있는 장소에서 모든 배선을 얻었고, 커맨드 라인에서부터 완전히 날아간 ML 파이프 라인에 이르기까지 엄청난 스펙트럼을 얻었습니다 ...