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

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

DDD
DDD원래의
2024-10-22 14:34:03827검색

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은 상위 패키지의 path 내에서 검색하여 표준 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는 모두 성공합니다.

위 내용은 Python에서 프로젝트 간 모듈 공유를 위한 네임스페이스 패키지를 정의하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.