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()
module
및 module2
실제로 같은 객체. 내 경우에는 두 플러그인이 동일한 전역 이름을 가질 수 있기 때문에 이것은 나쁘다.
내 응용 프로그램 사용자는 플러그인 파일을로드 할 경로 목록을 지정할 수 있으므로 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()
가져 오는 실제 모듈 이름에 대한 하지 관리 어떤 방법이 있나요?
),하지만 여러 곳에서 로딩을 허용하면 이것이 불가능하다고 생각합니다. 모듈 사이에 의존성이 있습니까? 예 : "/path/to/file.py"가져 오기 "/path/to/file2.py"? 참고로,이 경우는 작동 불가능합니다 :-) – mkiever