정의와 동작방식
- Namespace package: Python 3.3부터 도입된 개념
__init__.py
없이 패키지 정의 가능- 여러 디렉토리에 분산된 모듈을 하나의 논리적 패키지 에 속한 것처럼 동작케 해 줌
- 대규모 프로젝트에서 패키지의 독립적 관리 및 확장성 제공
- 동작 방식
sys.path
에서 여러 경로를 탐색해 동일한 이름의 디렉토리를 내부적으로 하나의 패키지로 병합.- 서로 다른 프로젝트에서 동일한 최상위 패키지 사용이 가능함.
- 패키지 확장성과 모듈화 용이
https://dsaint31.me/mkdocs_site/python/basic/module_package/#namespace-package
Example
다음과 같이 test.py
모듈과 test2.py
모듈이 서로 다른 디렉토리에 있지만,
동일한 논리적 패키지 ds_ns
에 속하도록 처리해주는 것이 바로 Namespace Package임.
- 단,
sys.path
등의 module search path 에 모듈들이 위치하는ds_ns
디렉토리를 포함하고 있는 디렉토리들이 포함되어야 함. - 아래의 예에서는
pro01
과pro02
의 path가 module search path에 있어야 한다.
example
├── ns_test.py
├── pro01
│ └── ds_ns
│ └── test.py
├── pro02
└── ds_ns
└── test2.py
이는 이들을 import하여 사용하는 ns_test.py
메인 스크립트를 통해 확인 가능함.
#!/bin/env python
import sys
import os
wd = os.path.dirname(__file__)
sys.path.append(f'{wd}/pro01')
sys.path.append(f'{wd}/pro02')
print(sys.path)
from ds_ns import test,test2
test.test()
test2.test2()
간단한 예로 동작하는 것이라, test.py
와 test2.py
는 하나의 function만 가지도록 구현함.
다음을 참고.
# test.py
def test():
print('test')
# test2.py
def test2():
print('test2')
같이보면 좋은 URLs
'Python' 카테고리의 다른 글
[Summary] NumPy(Numerical Python) (1) | 2024.09.12 |
---|---|
[Py] sys.exit() (0) | 2024.09.11 |
[CV] Chessboard관련 함수들: OpenCV (0) | 2024.09.10 |
[NumPy] ravel() 메서드 with flatten() 메서드 (0) | 2024.09.09 |
[NumPy] 생성 및 초기화, 기본 조작 (1) (0) | 2024.09.09 |