Python3 如何创建Python命名空间包

Python3 如何创建Python命名空间包

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

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

创建命名空间包

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

  • 使用本地命名空间的包。 PEP 420针对此类命名空间包的规范指出,Python 3.3及更高版本支持它。如果您的命名空间中的包只需要支持Python 3和pip安装,那么建议使用此方法。

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

  • 使用pkg资源方式的命名空间包。如果您的包需要支持zip安全或需要与已使用它的其他包一起工作,则建议使用此方法。

示例1

例如,在PYTHONPATH中有目录Package-1和Package-2,在使用者端可以导入namespace.module1和import 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

本地命名空间的包

Python 3.3中添加了PEP 420中的隐式命名空间包。您只需从包含命名空间包的目录中删除init.py,即可建立本地命名空间包。这是一个文件结构的示例

setup.py
mynamespace/
   # No __init__.py here.
   subpackage_a/
      # Sub-packages have __init__.py.
      __init__.py
      module.py

pkgutil风格的命名空间包

示例

pkgutil模块和pkgutil.extend path()函数在Python 2.3中首次提供。这可用于声明必须与Python 2.3及更高版本以及Python 3一起使用的命名空间包。最兼容的做法是使用这种方法。为了使用pkgutil风格构建命名空间包,必须包含一个init.py文件。

setup.py
mynamespace/
   __init__.py # Namespace package __init__.py
   subpackage_a/
      __init__.py # Sub-package __init__.py
      module.py

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程