В Python пакеты пространства имен — это удобный подход для распространения связанных модулей. Они позволяют нескольким продуктам Python определять модули в одном пространстве имен, тем самым позволяя конечным пользователям беспрепятственно их импортировать.
Начиная с Python 3.3, была введена концепция неявных пакетов пространства имен. Это устраняет необходимость в явных файлах __init__.py в каталогах пакетов пространства имен. Система импорта автоматически ищет в sys.path каталоги без файлов __init__.py и инициализирует их как пакеты пространства имен. () можно использовать для определения пакетов явного пространства имен:
from pkgutil import Extend_path __path__ = Extend_path(__path__, __name__)Эта строка добавляет любые обычные пакеты, найденные в пути поиска, к атрибутуfrom pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
Использование обычного и пространства имен Пакеты вместеВ сценариях, где сосуществуют как обычные пакеты, так и пакеты пространства имен, упомянутый ранее метод Extend_path() был расширен для включения пакетов неявного пространства имен. Это позволяет использовать следующую структуру каталогов:
При использовании файлов __init__.py с функцией Extend_path(), import package.foo, import package.bar и import package.baz будут работать должным образом.
├── path1 │ └── package │ ├── __init__.py │ └── foo.py ├── path2 │ └── package │ └── bar.py └── path3 └── package ├── __init__.py └── baz.py
В отличие от pkgutil.extend_path(), функция pkg_resources.declare_namespace() не была обновлена для поддержки неявных пакетов пространства имен. Поэтому рекомендуется использовать решение pkgutil.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3