"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como definir pacotes de namespace para compartilhamento de módulos entre projetos em Python?

Como definir pacotes de namespace para compartilhamento de módulos entre projetos em Python?

Publicado em 2024-11-08
Navegar:957

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

Definindo pacotes de namespace para compartilhamento de módulos entre projetos

Em Python, os pacotes de namespace fornecem um meio de estruturar código relacionado em vários projetos. Para definir um pacote de namespace, é essencial evitar colocar arquivos __init__.py nos diretórios do pacote de namespace.

Evolução dos pacotes de namespace

Antes do Python 3.3, os pacotes de namespace eram necessários declaração explícita usando pkgutil.extend_path() ou pkg_resources.declare_namespace(). No entanto, no Python 3.3 em diante, pacotes de namespace implícitos foram introduzidos, permitindo sua criação perfeita sem qualquer declaração.

Interação com pacotes regulares

Os pacotes de namespace podem coexistir com pacotes regulares , permitindo uma estrutura hierárquica. Ao importar um módulo dentro de um pacote de namespace, o Python pesquisa dentro do path do pacote pai, estendendo a pesquisa além do padrão sys.path.

pkgutil.extend_path() vs . pkg_resources.declare_namespace()

Embora pkgutil.extend_path() e pkg_resources.declare_namespace() tenham sido usados ​​anteriormente para definir pacotes de namespace, o primeiro é recomendado por sua compatibilidade à prova de futuro com pacotes de namespace implícitos. .

Estrutura de exemplo

Considere a seguinte estrutura de diretório:

Package-1/namespace/
Package-2/namespace/
├── path1
│  └── package
│     ├── __init__.py
│     └── foo.py
├── path2
│  └── package
│     └── bar.py
└── path3
    └── package
        ├── __init__.py
        └── baz.py

Com as declarações extend_path necessárias nos arquivos __init__.py, importações como namespace.foo, namespace.bar e namespace.baz serão todas bem-sucedidas.

Declaração de lançamento Este artigo foi reimpresso em: 1729575800 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3