본문 바로가기

언어/Python

[ Python ] 상위 폴더에 있는 모듈 import 시 경로 설정하기

반응형

Python에서 상위 폴더에 위치한 모듈을 import하려면 일반적인 import문만으로는 작동하지 않습니다. Python의 import 시스템은 기본적으로 현재 스크립트가 실행되는 디렉토리와 sys.path에 포함된 경로에서만 모듈을 찾기 때문입니다.

상위 폴더의 모듈을 import하는 방법은 여러 가지가 있으며, 아래에서 대표적인 방법들을 설명하겠습니다.


1. sys.path에 상위 디렉토리 추가

Python의 sys.path는 모듈을 찾을 경로들의 리스트입니다. 여기에 상위 디렉토리를 추가하여 모듈을 import할 수 있습니다.

import sys
import os

# 상위 디렉토리를 sys.path에 추가
sys.path.append(os.path.abspath(".."))

# 상위 디렉토리에 있는 모듈 import
import module_name

예시

프로젝트 구조:

project/
├── main/
│   └── script.py
├── utils/
    └── helper.py

script.py에서 helper.py를 import하려면:

import sys
import os

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
import helper

2. PYTHONPATH 환경 변수 사용

PYTHONPATH 환경 변수에 상위 폴더를 추가하면, 해당 경로의 모듈을 import할 수 있습니다.

방법

  1. 환경 변수 설정:
   export PYTHONPATH=/path/to/project

또는 Windows에서는:


   set PYTHONPATH=C:\path\to\project
  1. Python 코드에서 바로 import:
    import utils.helper

3. 패키지로 설정 (Relative Import 사용)

상위 폴더를 패키지로 처리하면, 상대 경로를 사용하여 import할 수 있습니다. 패키지 설정을 위해서는 각 디렉토리에 __init__.py 파일이 필요합니다.

예시

프로젝트 구조:

project/
├── main/
│   ├── __init__.py
│   └── script.py
├── utils/
    ├── __init__.py
    └── helper.py

script.py에서 helper.py를 import하려면:

from ..utils import helper

⚠️ 주의: 상대 import는 패키지로 실행될 때만 동작하므로, python -m main.script처럼 실행해야 합니다.


4. importlib를 사용한 동적 로드

Python 3.1 이상에서는 importlib를 사용해 동적으로 모듈을 로드할 수 있습니다.

import importlib.util
import sys
import os

module_name = "helper"
module_path = os.path.abspath("../utils/helper.py")

spec = importlib.util.spec_from_file_location(module_name, module_path)
module = importlib.util.module_from_spec(spec)
sys.modules[module_name] = module
spec.loader.exec_module(module)

# helper 모듈 사용
module.some_function()

5. 권장 방법

  • 간단한 프로젝트에서는 sys.path를 수정하거나 PYTHONPATH를 설정하는 방법이 적합합니다.
  • 복잡한 프로젝트에서는 프로젝트를 패키지 구조로 정리하고 상대 import를 사용하는 것이 좋습니다.

구체적인 프로젝트 구조나 상황에 따라 위 방법 중 적합한 것을 선택하세요! 😊

반응형