네임스페이스 패키지란?
Python에서 네임스페이스 패키지(namespace package)는 하나의 Python 코드를 여러 프로젝트에 걸쳐 나누어 배포할 수 있도록 해주는 기능입니다. 관련된 여러 라이브러리를 각각 별도의 배포판으로 릴리스하고 싶을 때 특히 유용합니다.
예를 들어 PYTHONPATH에 다음과 같이 Package-1과 Package-2 디렉터리가 있다고 가정해 보겠습니다.
Package-1/namespace/__init__.py Package-1/namespace/module1/__init__.py Package-2/namespace/__init__.py Package-2/namespace/module2/__init__.py
이렇게 구성하면 최종 사용자는 아래와 같이 각 모듈을 자유롭게 임포트(import)할 수 있습니다.
import namespace.module1 import namespace.module2
Python 3.3 이상에서의 방법
Python 3.3부터는 별도의 설정 없이도 네임스페이스 패키지가 자동으로 동작합니다. 네임스페이스 패키지로 사용할 디렉터리에 __init__.py 파일을 두지 않기만 하면 됩니다. 이는 Python 3.3에서 도입된 암시적 네임스페이스 패키지(implicit namespace packages) 기능 덕분입니다.
구버전 Python에서의 방법 (pkgutil 활용)
Python 3.3 미만 버전에서는 표준 라이브러리인 pkgutil 모듈을 사용하여 특정 네임스페이스에 모듈을 '추가'하는 방식으로 구현합니다. 두 패키지의 __init__.py 파일에 각각 다음 두 줄을 추가해야 합니다.
# Package-1/namespace/__init__.py 및 Package-2/namespace/__init__.py 공통 적용 from pkgutil import extend_path __path__ = extend_path(__path__, __name__)
이 코드는 sys.path에 등록된 디렉터리들 중에서 해당 패키지와 동일한 이름을 가진 하위 디렉터리를 모두 찾아 패키지의 __path__에 추가합니다. 이렇게 하면 두 패키지를 서로 독립적으로 배포하면서도 하나의 네임스페이스 아래에서 함께 사용할 수 있습니다.