Python 3.4 이상에서는 소스 파일에서 직접 가져올 수 있습니다 (문서 링크) . 이것이 가장 간단한 해결책은 아니지만 완전성을 위해이 답변을 포함시킵니다.
다음은 예입니다. 먼저 가져올 파일의 이름은 foo.py
다음과 같습니다.
def announce():
print("Imported!")
위의 파일을 가져 오는 코드는 설명서의 예제에서 크게 영감을 얻었습니다.
import importlib.util
def module_from_file(module_name, file_path):
spec = importlib.util.spec_from_file_location(module_name, file_path)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
return module
foo = module_from_file("foo", "/path/to/foo.py")
if __name__ == "__main__":
print(foo)
print(dir(foo))
foo.announce()
출력 :
<module 'foo' from '/path/to/foo.py'>
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'announce']
Imported!
변수 이름, 모듈 이름 및 파일 이름이 일치하지 않아도됩니다. 이 코드는 여전히 작동합니다.
import importlib.util
def module_from_file(module_name, file_path):
spec = importlib.util.spec_from_file_location(module_name, file_path)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
return module
baz = module_from_file("bar", "/path/to/foo.py")
if __name__ == "__main__":
print(baz)
print(dir(baz))
baz.announce()
출력 :
<module 'bar' from '/path/to/foo.py'>
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'announce']
Imported!
프로그래밍 방식으로 모듈을 가져 오는 방법은 Python 3.1에 도입되었으며 모듈을 가져 오는 방법을보다 강력하게 제어 할 수 있습니다. 자세한 내용은 설명서를 참조하십시오.