프로젝트 간 모듈 공유를 위한 네임스페이스 패키지 정의
Python에서 네임스페이스 패키지는 여러 프로젝트에 걸쳐 관련 코드를 구조화하는 수단을 제공합니다. 네임스페이스 패키지를 정의하려면 네임스페이스 패키지 디렉터리 내에 __init__.py 파일을 배치하지 않는 것이 중요합니다.
네임스페이스 패키지의 진화
Python 3.3 이전에는 네임스페이스 패키지가 필요했습니다. pkgutil.extend_path() 또는 pkg_resources.declare_namespace()를 사용하여 명시적으로 선언합니다. 그러나 Python 3.3 이상에서는 암시적 네임스페이스 패키지가 도입되어 선언 없이 원활한 생성이 가능해졌습니다.
일반 패키지와의 상호 작용
네임스페이스 패키지는 일반 패키지와 공존할 수 있습니다. , 계층 구조를 허용합니다. 네임스페이스 패키지 내에서 모듈을 가져올 때 Python은 상위 패키지의 경로 내에서 검색하여 표준 sys.path 이상으로 검색을 확장합니다.
pkgutil.extend_path() 대 pkg_resources.declare_namespace()
pkgutil.extend_path() 및 pkg_resources.declare_namespace()는 이전에 네임스페이스 패키지를 정의하는 데 사용되었지만 암시적 네임스페이스 패키지와의 미래 호환성을 위해 전자를 사용하는 것이 좋습니다. .
구조 예
다음 디렉터리 구조를 고려하세요.
Package-1/namespace/ Package-2/namespace/ ├── path1 │ └── package │ ├── __init__.py │ └── foo.py ├── path2 │ └── package │ └── bar.py └── path3 └── package ├── __init__.py └── baz.py
__init__.py 파일에 필요한 확장 경로 선언을 사용하면 네임스페이스.foo, 네임스페이스.bar 및 네임스페이스.baz와 같은 가져오기가 모두 성공합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3