Python에서 다른 디렉터리에서 모듈을 임포트하는 방법
Lukas Schneider
DevOps Engineer · Leapcell

Key Takeaways
- 런타임 시
sys.path를 수정하여 다른 디렉토리를 포함할 수 있습니다. PYTHONPATH환경 변수를 설정하면 Python이 외부 모듈을 찾는 데 도움이 됩니다.- 패키지로 프로젝트를 구성하면 상대적 임포트를 사용할 수 있습니다.
Python에서 코드를 모듈 및 패키지로 구성하면 가독성과 유지 관리성이 향상됩니다. 그러나 다른 디렉터리에서 모듈을 가져와야 하는 경우가 종종 발생합니다. 이 문서에서는 프로젝트가 잘 구성되고 효율적으로 유지되도록 이를 달성하는 다양한 방법을 살펴봅니다.
Python의 모듈 검색 경로 이해
기본적으로 Python은 다음 위치에서 모듈을 검색합니다.
- 입력 스크립트의 디렉터리(또는 현재 디렉터리).
PYTHONPATH환경 변수에 지정된 디렉터리.- 표준 라이브러리 디렉터리.
모듈이 이러한 위치 외부에 있는 경우 Python은 ModuleNotFoundError를 발생시킵니다. 다른 디렉터리에서 모듈을 가져오려면 아래에 설명된 방법을 사용할 수 있습니다.
다른 디렉터리에서 모듈을 가져오는 방법
1. 런타임 시 sys.path 수정
Python의 sys.path는 모듈에 대한 인터프리터의 검색 경로를 결정하는 목록입니다. 이 목록에 대상 디렉터리를 추가하면 해당 디렉터리에서 모듈을 가져올 수 있습니다.
예제:
import sys import os # 대상 디렉터리의 절대 경로 확인 target_directory = os.path.abspath('/path/to/your/directory') # 디렉터리를 sys.path에 추가 sys.path.append(target_directory) # 이제 원하는 모듈을 가져옵니다. import your_module
고려 사항:
- 유연성: 이 방법을 사용하면 런타임 중에 모듈 검색 경로를 동적으로 수정할 수 있습니다.
- 이식성: 절대 경로를 하드 코딩하면 코드 이식성이 저하될 수 있습니다.
os.path함수와 함께 상대 경로를 사용하면 이 문제를 완화할 수 있습니다. - 유지 관리성:
sys.path를 자주 수정하면 코드를 이해하고 유지 관리하기가 더 어려워질 수 있습니다.
2. PYTHONPATH 환경 변수 활용
PYTHONPATH 환경 변수를 설정하면 Python이 모듈을 검색할 추가 디렉터리를 지정할 수 있습니다.
단계:
-
절대 경로 확인: 가져오려는 모듈이 포함된 디렉터리의 절대 경로를 찾습니다.
-
PYTHONPATH변수 설정:-
Unix 또는 macOS:
export PYTHONPATH="/path/to/your/directory:$PYTHONPATH" -
Windows:
set PYTHONPATH=C:\path\to\your\directory;%PYTHONPATH%
-
-
Python 스크립트 실행:
PYTHONPATH가 설정되면 Python은 지정된 디렉터리를 모듈 검색 경로에 포함합니다.
고려 사항:
- 지속성: 환경 변수 설정은 임시적이며 셸 시작 파일 또는 시스템 환경 변수에 추가되지 않는 한 현재 세션에만 적용됩니다.
- 범위: 이 방법은 환경에서 실행되는 모든 Python 스크립트에 영향을 미치므로 다른 프로젝트에 다른 모듈 버전이 필요한 경우 의도하지 않은 결과가 발생할 수 있습니다.
3. 패키지 상대적 임포트 사용
프로젝트가 __init__.py 파일이 있는 패키지로 구성된 경우 상대적 임포트를 사용하여 상위 또는 형제 디렉터리의 모듈에 액세스할 수 있습니다.
예제 디렉터리 구조:
project/
├── package/
│ ├── __init__.py
│ ├── module_a.py
│ └── subpackage/
│ ├── __init__.py
│ └── module_b.py
└── main.py
module_b에서 module_a 가져오기:
# module_b.py 내부 from .. import module_a
고려 사항:
- 실행 컨텍스트: 상대적 임포트는 모듈의 이름 속성을 기반으로 합니다. 모듈이 패키지의 일부인 경우에 작동하며 스크립트가 직접 실행되는 경우에는 제대로 작동하지 않을 수 있습니다.
- 가독성: 상대적 임포트는 패키지 내에서 참조를 단순화할 수 있지만 새 개발자가 코드를 덜 읽기 쉽고 이해하기 어렵게 만들 수도 있습니다.
4. importlib 모듈 활용
동적 임포트의 경우 Python의 importlib 모듈은 모듈을 프로그래밍 방식으로 가져오는 기능을 제공합니다.
예제:
import importlib.util import sys import os # 모듈 경로 module_name = 'your_module' module_path = '/path/to/your/directory/your_module.py' # 모듈 로드 spec = importlib.util.spec_from_file_location(module_name, module_path) your_module = importlib.util.module_from_spec(spec) sys.modules[module_name] = your_module spec.loader.exec_module(your_module) # 이제 your_module을 사용할 수 있습니다. your_module.your_function()
고려 사항:
- 유연성: 이 방법은 플러그인 또는 확장과 같이 동적 임포트가 필요한 시나리오에 강력합니다.
- 복잡성: 추가적인 복잡성을 야기하며 일반적으로 표준 모듈 임포트에는 필요하지 않습니다.
모범 사례
- 일관된 프로젝트 구조 유지: 관련 모듈이 동일한 패키지 또는 디렉터리 내에 있도록 프로젝트를 구성하여 복잡한 임포트 전략의 필요성을 최소화합니다.
- 가상 환경 사용: 가상 환경은 종속성을 관리하는 데 도움이 되며 프로젝트 환경을 격리하여 모듈 임포트를 단순화할 수 있습니다.
- 임포트 문서화: 코드 유지 관리 및 협업에 도움이 되도록
sys.path에 대한 수정 또는 환경 변수에 대한 의존성을 명확하게 문서화합니다.
이러한 방법을 이해하고 적용하면 다른 디렉터리에서 모듈 임포트를 효과적으로 관리하여 보다 체계적이고 유지 관리 가능한 Python 프로젝트를 만들 수 있습니다.
FAQs
디렉터리가 Python의 기본 모듈 검색 경로에 없기 때문입니다.
단기적으로는 유용하지만 대규모 프로젝트에서는 유지 관리성을 저해할 수 있습니다.
__init__.py 파일이 있는 구조화된 패키지 내에서 작업할 때.
Leapcell은 Python 프로젝트 호스팅을 위한 최고의 선택입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하십시오.
무제한 프로젝트를 무료로 배포
- 사용량에 대해서만 지불하십시오 — 요청 없음, 요금 없음.
타의 추종을 불허하는 비용 효율성
- 유휴 요금 없이 종량제로 지불하십시오.
- 예: $25는 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
간편한 확장성 및 고성능
- 고도의 동시성을 쉽게 처리하기 위한 자동 확장.
- 운영 오버헤드가 전혀 없습니다. 빌드에만 집중하십시오.
설명서에서 자세히 알아보십시오!
X에서 팔로우하세요: @LeapcellHQ



