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.
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 atributofrom 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:
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.
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