如何在Python 3中创建Python命名空间包?

如何在Python 3中创建Python命名空间包?

使用命名空间包,可以将一个包的子包和模块分发给许多独立的分发包(在本文档中称为分发),以避免歧义。

在Python中,命名空间包允许将Python代码分散在多个项目中。 当您想要将相关的库发布为独立的下载时,这非常有用。

阅读更多:Python 教程

创建命名空间包

目前,有三种方法可以开发命名空间包。这些方法如下所示。

  • 使用本地命名空间的包。 PEP 420的此类命名空间包规范指出,Python 3.3及更高版本支持它。 如果你的命名空间中的包只需要支持Python 3和pip安装,则建议这样做。

  • 在pkgutil样式中使用命名空间包。 对于需要支持Python 2和3以及通过pip和python setup.py安装的新包,建议使用此方法。

  • 在pkg资源方式中使用命名空间包。 如果您的包需要支持zip安全性或者您需要将其与已经使用它的其他包一起使用,则建议使用这种方法。

示例1

例如,在PYTHONPATH中有Package-1和Package-2目录,最终用户可以导入namespace.module1并导入namespace.module2。 下面的代码显示了每个包中的名称空间。

Package-1/namespace/__init__.py
Package-1/namespace/module1/__init__.py
Package-2/namespace/__init__.py
Package-2/namespace/module2/__init__.py

示例2

这个例子可以用来理解当子包是Python包中的一部分时,如何存在名称空间。

mynamespace/
   __init__.py
   subpackage_a/
      __init__.py
      ...
   subpackage_b/
      __init__.py
      ...
module_b.py
Setup.p

本地命名空间的包

PEP 420中的隐式命名空间包已添加到Python 3.3中。 您只需要从包含命名空间包的目录中删除__init .py即可建立本地命名空间包。 文件结构的一种模型

setup.py
mynamespace/
   # 这里没有__init__.py。
   subpackage_a/
      # 子包有__init__.py。
      __init__.py
      module.py

使用pkgutil样式的命名空间包

示例

pkgutil模块和pkgutil.extend path()函数首次在Python 2.3中提供。这可以用于声明必须与Python 2.3以及之后版本和Python 3一起使用的名称空间包。最高兼容性的最佳方法是采用此方法。 您必须包括一个__init .py文件来构建pkgutil样式的命名空间包−

setup.py
mynamespace/
   __init__.py # 命名空间包__init__.py
   subpackage_a/
      __init__.py # 子包__init__.py
      module.py

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程