5.7. Anaconda 附加组件结构

Anaconda 附加组件是 Python 软件包,其中包含含有 __init__.py 和其他源目录(子软件包)的目录。由于 Python 只允许您导入每个软件包名称一次,因此请为软件包顶级目录指定唯一的名称。您可以使用任意名称,因为附加组件都会被加载,而无论它们的名称是什么,唯一的要求是它们必须被放在特定的目录中。

对附加组件的建议的命名约定类似于 Java 软件包或 D-Bus 服务名称。

要使目录名称成为 Python 软件包的唯一标识符,请使用组织的反向域名作为加载项名称的前缀,并使用下划线(_)而不是点。例如,com_example_hello_world

重要

确保在每个目录中创建一个 __init__.py 文件。缺少这个文件的目录被视为无效的 Python 软件包。

在编写附加组件时,请确定以下几项:

  • 对每个界面(图形界面和文本界面)的支持可由单独的子软件包提供,对于图形界面,这些子软件包被命名为 gui ,对于基于文本的界面,这些子软件包被命名为 tui
  • guitui 软件包包含一个 spokes 子软件包。[1]
  • 软件包中包含的模块有一个任意名称。
  • gui/tui/ 目录包含带有任何名称的 Python 模块。
  • 有的服务可以执行附加组件的实际工作。可使用 Python 或者其他任何语言编写该服务。
  • 该服务实现了对 D-Bus 和 Kickstart 的支持。
  • 这个附加组件包含启用自动启动该服务的文件。

以下是支持每个接口(Kickstart、GUI 和 TUI)的附加目录结构示例:

例 5.1. 附加组件结构示例

com_example_hello_world
├─ gui
│  ├─ init.py
│  └─ spokes
│     └─ init.py
└─ tui
   ├─ init.py
   └─ spokes
   └─ init.py

每个软件包必须至少包含一个带有任意名称的模块,该名称定义了从 API 中定义的一个或多个类继承的类。

注意

对于所有附加组件,请遵循 Python 的 PEP 8PEP 257 文档字符串约定指南。对于 Anaconda 中的文档字符串的实际内容格式没有共识,唯一的要求是它们是人类可读的。如果您计划对您的附加组件使用自动生成的文档,则文档字符串应遵循您用于完成此操作的工具包指南。

如果附加组件需要定义一个新类别,您可以包含类别子软件包,但不建议这样做。



[1] 如果附加组件需要定义一个新的类别,则 gui 软件包中可能还包含一个 类别 子软件包,但不建议这样做。