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

Python에서 프로젝트 간 모듈 공유를 위한 네임스페이스 패키지를 정의하는 방법은 무엇입니까?

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

How to Define Namespace Packages for Cross-Project Module Sharing in Python?

프로젝트 간 모듈 공유를 위한 네임스페이스 패키지 정의

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와 같은 가져오기가 모두 성공합니다.

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

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

Copyright© 2022 湘ICP备2022001581号-3