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