본문 바로가기
Python

[Py] Namespace Package

by ds31x 2024. 9. 11.

정의와 동작방식

  • 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 디렉토리를 포함하고 있는 디렉토리들이 포함되어야 함.
  • 아래의 예에서는 pro01pro02의 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.pytest2.py는 하나의 function만 가지도록 구현함.

다음을 참고.

# test.py
def test():
    print('test')
# test2.py
def test2():
    print('test2')

같이보면 좋은 URLs

 

https://ds31x.tistory.com/198

 

[Python] Module, Package and Library (+ Framework)

필요한 개념 및 용어 정리Library and Frameworkhttps://dsaint31.tistory.com/452 [Programming] Library vs. Framework이 둘을 명확히 구분하는 정의는 사실 없다고 봐야한다. 개인적으로 호출 시점과 같은 흐름에 대한

ds31x.tistory.com


 

728x90