"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Python에서 공유 모듈용 네임스페이스 패키지를 만드는 방법은 무엇입니까?

Python에서 공유 모듈용 네임스페이스 패키지를 만드는 방법은 무엇입니까?

2024-11-08에 게시됨
검색:386

How to Create Namespace Packages in Python for Shared Modules?

공유 모듈 배포를 위해 Python에서 네임스페이스 패키지 만들기

소개

Python에서 네임스페이스 패키지는 관련 모듈을 배포하기 위한 편리한 접근 방식입니다. 이를 통해 여러 Python 제품이 동일한 네임스페이스 내에서 모듈을 정의할 수 있으므로 최종 사용자가 모듈을 원활하게 가져올 수 있습니다.

네임스페이스 패키지 구현

Python 3.3의 암시적 네임스페이스 패키지

Python 3.3부터 암시적 네임스페이스 패키지 개념이 도입되었습니다. 이렇게 하면 네임스페이스 패키지 디렉터리 내에 명시적인 __init__.py 파일이 필요하지 않습니다. 가져오기 시스템은 __init__.py 파일이 없는 디렉터리에 대해 sys.path를 자동으로 검색하고 이를 네임스페이스 패키지로 초기화합니다.

Python 3.3 이전 솔루션

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가 모두 예상대로 작동합니다.

pkg_resources .declare_namespace()

pkgutil.extend_path()와 달리 pkg_resources.declare_namespace() 함수는 암시적 네임스페이스 패키지를 지원하도록 업데이트되지 않았습니다. 따라서 pkgutil 솔루션을 사용하는 것이 좋습니다.

릴리스 선언문 이 글은 1729575676에서 재인쇄되었습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3