정의와 동작방식
- Namespace package: Python 3.3부터 도입된 개념
__init__.py
없이 패키지 정의 가능- 여러 디렉토리에 분산된 모듈을 하나의 논리적 패키지 에 속한 것처럼 동작케 해 줌
- 대규모 프로젝트에서 패키지의 독립적 관리 및 확장성 제공
- 동작 방식
sys.path
에서 여러 경로를 탐색해 동일한 이름의 디렉토리를 내부적으로 하나의 패키지로 병합.- 서로 다른 프로젝트에서 동일한 최상위 패키지 사용이 가능함.
- 패키지 확장성과 모듈화 용이
https://dsaint31.me/mkdocs_site/python/basic/module_package/#namespace-package
BME228
Modules and Packages Module 쉽게 생각하면 Python code 로 구성된 file .py자체를 가리킨다. Module은 import될 때 각각 고유의 namespace를 가지므로, Module은 일종의 Namespace이기도 함. Python에서 module은 확장자가 .p
dsaint31.me
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] Module, Package and Library (+ Framework)
필요한 개념 및 용어 정리Library and Frameworkhttps://dsaint31.tistory.com/452 [Programming] Library vs. Framework이 둘을 명확히 구분하는 정의는 사실 없다고 봐야한다. 개인적으로 호출 시점과 같은 흐름에 대한
ds31x.tistory.com
'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 |