반응형
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할 수 있습니다.
방법
- 환경 변수 설정:
export PYTHONPATH=/path/to/project
또는 Windows에서는:
set PYTHONPATH=C:\path\to\project
- 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를 사용하는 것이 좋습니다.
구체적인 프로젝트 구조나 상황에 따라 위 방법 중 적합한 것을 선택하세요! 😊
반응형
'언어 > Python' 카테고리의 다른 글
[ Python ] REST API 기능 제공하기 (0) | 2025.02.03 |
---|---|
[ Python ] Requests - Rest API 사용하기 (0) | 2025.01.12 |
[ Python ] Pandas 기본 사용하기 (0) | 2025.01.12 |
[ Python ] 설치하기 (특정 버전) (0) | 2025.01.11 |
[ Python ] 파이썬을 지원하는 다양한 종류의 Framework 알아보기 (0) | 2025.01.11 |