import
2022.08.04 - [Python] import - 검색 순서
위 글에서는 모듈을 가져오는 방법과 검색 순서에 대해서 알아보았다. 그래서 다른 경로에 있는 python 모듈을 가져와 사용하려면 어떻게 해야 하는가?
파이썬에서는 경로를 나타내는 방법으로 상대 경로와 절대 경로가 존재하지만, 이 글에서는 단순하게 동일 경로에 있는 모듈 하위 경로에 있는 모듈, 상위 경로에 있는 모듈을 가져와보도록 한다.
아래는 바쁜 현대인을 위한 요약이다.
동일 경로 : 단순 import
하위 경로 : from <PATH> import <FILE>
상위 경로/다른 경로 : sys.path.append('PATH')
동일 경로
먼저 아래 구조의 프로젝트가 있다고 하자.
expr/plus.py의 내용은 아래와 같다.
# expr/plus.py
def add(a, b):
return a + b
if __name__ == "__main__":
add(1, 2)
이 expr/plus.py의 add 함수를 expr/minus.py에서 불러와 사용하고자 한다. 이 경우에는 단순 import 하면 된다.
# expr/minus.py
import plus
def sub(a, b):
return a - b
if __name__ == "__main__":
a = 3
b = 8
print(plus.add(a, b))
하위 경로
이번엔 아래와 같이 project 디렉터리에 새로운 파이썬 파일(print_expr.py)을 생성한 뒤, expr/plus.py의 add 함수를 import 하여 사용하고 싶다.
아까와 동일하게 plus를 import 해보았지만, ModuleNotFoundError 에러가 발생했다.
print_expr.py의 sys.path를 확인해보자.
결과에 /home/ubuntu/project/expr 경로가 존재하지 않는 것을 확인할 수 있다.
하위 경로에 위치한 모듈을 import 할 때는 from 절을 사용하여 추가할 수 있다.
from expr import plus
if __name__ == "__main__":
print(plus.add(1, 2))
상위 경로
이번에는 expr/minus.py에서 print_expr.py를 import 하여 사용하고 싶다.
일단 print_expr.py에 호출할 format 함수를 추가했다.
from expr import plus
import sys
def format(result):
return f"result: {result}"
if __name__ == "__main__":
print(plus.add(1, 2))
상위 디렉터리 또는 다른 디렉터리에 위치한 모듈을 불러올 때는 sys.path에 불러올 모듈이 위치한 경로를 추가하도록 한다. sys.path는 append 함수를 사용하여 추가할 수 있다.
sys.path.append('/home/ubuntu/project')
이후 print_expr 모듈에 포함된 함수를 사용할 수 있다.
import plus
import sys
sys.path.append('/home/ubuntu/project')
import print_expr
def sub(a, b):
return a - b
if __name__ == "__main__":
# print("\n".join(sys.path))
print(print_expr.format(sub(1, 2)))
참고 문서
https://velog.io/@ulr0xb/Python-%EC%83%81%EC%9C%84-%ED%8F%B4%EB%8D%94-import
https://kaizen8501.tistory.com/191?category=958667