Python에서 네임스페이스 패키지는 관련 모듈을 배포하기 위한 편리한 접근 방식입니다. 이를 통해 여러 Python 제품이 동일한 네임스페이스 내에서 모듈을 정의할 수 있으므로 최종 사용자가 모듈을 원활하게 가져올 수 있습니다.
Python 3.3부터 암시적 네임스페이스 패키지 개념이 도입되었습니다. 이렇게 하면 네임스페이스 패키지 디렉터리 내에 명시적인 __init__.py 파일이 필요하지 않습니다. 가져오기 시스템은 __init__.py 파일이 없는 디렉터리에 대해 sys.path를 자동으로 검색하고 이를 네임스페이스 패키지로 초기화합니다.
3.3 이전 Python 버전의 경우 pkgutil.extend_path () 메소드를 사용하여 명시적인 네임스페이스 패키지를 정의할 수 있습니다:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
이 줄은 검색 경로에서 찾은 일반 패키지를 네임스페이스 패키지의 path 속성에 추가합니다.
일반 패키지와 네임스페이스 패키지가 모두 공존하는 시나리오에서는 앞서 언급한 extend_path() 메서드가 암시적 네임스페이스를 포함하도록 확장되었습니다. 패키지. 이는 다음 디렉토리 구조를 허용합니다:
├── path1 │ └── package │ ├── __init__.py │ └── foo.py ├── path2 │ └── package │ └── bar.py └── path3 └── package ├── __init__.py └── baz.py
extend_path()를 사용하는 __init__.py 파일을 사용하면 import package.foo, import package.bar 및 import package.baz가 모두 예상대로 작동합니다.
pkgutil.extend_path()와 달리 pkg_resources.declare_namespace() 함수는 암시적 네임스페이스 패키지를 지원하도록 업데이트되지 않았습니다. 따라서 pkgutil 솔루션을 사용하는 것이 좋습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3