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