본문 바로가기
파이썬 공부

파이썬 상위 폴더 import 하는 법 - 검색하다 답답해서 내가 글 쓴다

by 파이썬코딩대학 2024. 11. 15.

파이썬 상위 폴더에서 모듈 임포트하기: 초보자도 쉽게 배우는 방법

안녕하세요! 오늘은 파이썬을 사용하면서 종종 부딪히는 문제 중 하나인 "상위 폴더에서 모듈을 임포트(import)하는 방법"에 대해 이야기해보려고 해요. 파이썬 프로젝트가 커지면서 파일 구조가 복잡해지더라도, 이 문제를 해결하면 코드 관리가 훨씬 수월해질 거예요. 시작해볼까요?

기본적인 파이썬 임포트 이해하기

우선 기본적인 임포트를 이해해야 해요. 파이썬에서 모듈이나 패키지를 임포트할 때, 보통 같은 디렉토리 내에 있는 파일을 사용하곤 합니다. 예를 들어, 만약 app.py라는 파일이 module.py라는 파일과 같은 폴더에 있다면, app.py에서 다음과 같이 module.py를 임포트할 수 있어요:

import module

 

이렇게 하면 module.py 안에 정의된 함수나 클래스를 사용할 수 있게 됩니다.

 

파이썬 상위 폴더 import 하는 법 - 검색하다 답답해서 내가 글 쓴다
파이썬 상위 폴더 import 하는 법 - 검색하다 답답해서 내가 글 쓴다

상위 폴더에서 임포트가 왜 필요할까요?

프로젝트가 점점 커지면서 파일과 디렉토리가 증가하게 되면, 코드를 더 체계적으로 관리하기 위해 모듈을 여러 서브 폴더에 나누게 됩니다. 이때, 하위 폴더에 있는 파일이 상위 폴더에 있는 코드를 필요로 할 때 "상위 폴더에서의 임포트"가 필요하게 됩니다.

예를 들어, 다음과 같은 디렉토리 구조를 생각해볼게요:

/my_project
    /utils
        helper.py
    main.py

 

여기서 helper.py 파일에서 main.py의 내용을 사용하고 싶다면 어떻게 할까요?

상위 폴더에서 임포트하는 방법

파이썬은 기본적으로 부모 폴더를 직접 임포트하는 기능을 제공하지 않아요. 하지만 몇 가지 방법을 통해 이를 해결할 수 있습니다.

1. sys.path를 이용한 임포트

sys 모듈을 사용하여 파이썬의 모듈 검색 경로에 디렉토리를 추가할 수 있습니다. sys.path에 상위 폴더의 경로를 추가하면 그 폴더의 모듈을 임포트할 수 있어요.

# helper.py
import sys
import os

# 상위 디렉토리 경로를 추가합니다.
sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(__file__))))

import main  # 이제 main.py의 내용을 임포트할 수 있습니다.

이 방법은 편하지만, 코드가 좀 더 복잡해질 수 있습니다. 또한, 올바른 경로를 지정하지 않으면 임포트 오류가 발생할 수 있으므로 주의가 필요합니다.

2. 패키지로서의 구조화

파이썬 프로젝트를 더 잘 관리하기 위해선 패키지로 구조화하는 것이 좋습니다. 디렉토리 안에 __init__.py 파일을 추가하면 해당 디렉토리를 패키지로 인식하게 됩니다.

디렉토리 구조를 다음과 같이 변경해볼게요:

/my_project
    /utils
        __init__.py
        helper.py
    main.py

 

그런 다음, helper.py에서 from .. import main 문법을 사용하여 패키지의 부모 폴더에 접근할 수 있습니다.

# helper.py
from .. import main

이 방법은 폴더 구조가 패키지로 잘 맞춰져 있을 때 가장 깔끔하게 동작합니다.

결론

파이썬에서 상위 폴더에서 모듈을 임포트하는 것은 처음에는 복잡해 보일 수 있습니다. 하지만 위에서 소개한 몇 가지 방법을 활용하면 훨씬 쉽게 문제를 해결할 수 있답니다. sys.path를 활용한 방법은 임시적인 방법으로 괜찮지만, 프로젝트를 더 깔끔하게 관리하기 위해선 패키지 구조화를 고려해보는 것이 좋습니다.

파이썬 프로젝트를 체계적으로 관리하고 싶다면, 폴더 구조화와 임포트의 개념을 잘 이해하는 것이 중요해요. 오늘 소개한 방법들이 여러분의 코드 관리에 큰 도움이 되길 바랍니다! 궁금한 점이나 더 알고 싶은 내용이 있으면 언제든지 댓글로 남겨주세요. 감사합니다!