"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 criar pacotes de namespace em Python para módulos compartilhados?

Como criar pacotes de namespace em Python para módulos compartilhados?

Publicado em 2024-11-08
Navegar:164

How to Create Namespace Packages in Python for Shared Modules?

Criando pacotes de namespace em Python para distribuição de módulo compartilhado

Introdução

Em Python, pacotes de namespace são uma abordagem conveniente para distribuição de módulos relacionados. Eles permitem que vários produtos Python definam módulos dentro do mesmo namespace, permitindo assim que os usuários finais os importem perfeitamente.

Implementando pacotes de namespace

Pacotes de namespace implícitos em Python 3.3

A partir do Python 3.3, o conceito de pacotes de namespace implícitos foi introduzido. Isso elimina a necessidade de arquivos __init__.py explícitos nos diretórios de pacotes de namespace. O sistema de importação pesquisa automaticamente em sys.path diretórios sem arquivos __init__.py e os inicializa como pacotes de namespace. () pode ser utilizado para definir pacotes de namespace explícitos:

from pkgutil import extend_path __path__ = extend_path(__path__, __name__)

Esta linha adiciona quaisquer pacotes regulares encontrados no caminho de pesquisa ao atributo
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

Usando Regular e Namespace Pacotes juntosEm cenários onde coexistem pacotes regulares e de namespace, o método extend_path() mencionado anteriormente foi estendido para incluir pacotes de namespace implícitos. Isso permite a seguinte estrutura de diretório:

├── path1 │   └── pacote │   ├── __init__.py │   └── foo.py ├── caminho2 │   └── pacote │   └── bar.py └── caminho3 └── pacote ├── __init__.py └── baz.py

Com arquivos __init__.py empregando extend_path(), import package.foo, import package.bar e import package.baz funcionarão conforme o esperado.

├── path1
│   └── package
│       ├── __init__.py
│       └── foo.py
├── path2
│   └── package
│       └── bar.py
└── path3
    └── package
        ├── __init__.py
        └── baz.py

Em contraste com pkgutil.extend_path(), o A função pkg_resources.declare_namespace() não foi atualizada para suportar pacotes de namespace implícitos. Portanto, é aconselhável empregar a solução pkgutil.

Declaração de lançamento Este artigo foi reimpresso em: 1729575676 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