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