
정의와 동작방식
- Namespace package: Python 3.3부터 도입된 개념
__init__.py없이 패키지 정의 가능- 여러 디렉토리에 분산된 모듈을 하나의 논리적 패키지 에 속한 것처럼 동작케 해 줌
- 대규모 프로젝트에서 패키지의 독립적 관리 및 확장성 제공
- 단, zip파일로 패키지를 제공하는 경우엔
__init__.py가 꼭 필요함.
- 동작 방식
sys.path에서 여러 경로를 탐색해 동일한 이름의 디렉토리를 내부적으로 하나의 패키지로 병합.- 서로 다른 프로젝트에서 동일한 최상위 패키지 사용이 가능함.
- 패키지 확장성과 모듈화 용이
https://dsaint31.me/mkdocs_site/python/basic/module_package/#namespace-package
BME
module package Modules and Packages Module 쉽게 생각하면 Python code 로 구성된 file .py자체를 가리킨다. Module은 import될 때 각각 고유의 namespace를 가지므로, Module은 일종의 Namespace이기도 함. Python에서 module은
dsaint31.me
__init__.py 와 zip-import에 대한 보다 자세한 내용은 다음을 참고:
2025.10.17 - [Python] - zip import 튜토리얼-__init__.py 와 __main__.py
zip import 튜토리얼-__init__.py 와 __main__.py
zip-import 튜토리얼이 문서는 초보자를 대상으로 설치(pip) 없이 .zip 파일로 패키지와 관련 자원을 묶어서 사용하는 방법을 설명함.구성은 다음과 같음.package(패키지)와 __init__.py 에 대하여package를 z
ds31x.tistory.com
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
2024.02.03 - [Python] - [Python] Module, Package and Library (+ Framework)
[Python] Module, Package and Library (+ Framework)
필요한 개념 및 용어 정리Library and Frameworkhttps://dsaint31.tistory.com/452 [Programming] Library vs. FrameworkLibrary vs. Framework이 둘을 명확히 구분하는 정의는 사실 없다고 봐야한다.개인적으로 호출 시점과 같
ds31x.tistory.com
'Python' 카테고리의 다른 글
| [Summary] NumPy(Numerical Python) (3) | 2024.09.12 |
|---|---|
| [Py] sys.exit() (1) | 2024.09.11 |
| [CV] Chessboard관련 함수들: OpenCV (1) | 2024.09.10 |
| [NumPy] ravel() 메서드 with flatten() 메서드 (0) | 2024.09.09 |
| [NumPy] 생성 및 초기화, 기본 조작 (1) (0) | 2024.09.09 |