大多数公开可用的QGIS插件都托管在官方存储库中。但是,在某些情况下,有必要创建您自己的插件存储库,例如,将您的插件分发到某个组织的狭窄同事中。在本文中,我们将研究如何实现我们自己的插件存储库,并讨论将插件放置在其自己的存储库中所必须满足的最低要求。插件管理器
QGIS有一个用于处理插件的特殊工具-插件管理器。它允许您搜索插件,安装和删除它们,跟踪已安装插件的新版本的外观,连接第三方存储库等。对于每个插件,插件管理器都会提供一个窗口,其中包含有关插件的信息。填充此信息有三种方案:- 该插件位于存储库中,但未安装在您的计算机上。在这种情况下,插件管理器的所有信息均从plugins.xml文件中的插件描述中提取。
- 该插件已安装在您的计算机上,并且与存储库有连接。在这种情况下,仍然会从plugins.xml文件中的插件描述中提取部分信息,并从元数据文件metadata.txt中提取部分信息。
- 该插件已安装在您的计算机上,与存储库没有连接。在这种情况下,插件管理器的所有信息均从元数据文件metadata.txt中提取。
下表描述了三种情况中每种情况下参数在何处来自窗口以及有关插件的信息:- , QGIS, metadata.txt plugins.xml . initGui() .
- Installed version Available version, QGIS . Installed version Available version, QGIS «Installed version of this plugin is higher than any version found in repository». , , .
- , metadata.txt plugins.xml . .
- Available version plugins.xml version pyqgis_plugin, version.
- metadata.txt plugins.xml Experimental Deprecated, .
- QGIS (QgisMinimumVersion) (QgisMaximumVersion) , metadata.txt plugins.xml.
- , . , QgisMinimumVersion + 0.99.
存储库中的每个插件都应打包在一个单独的zip归档文件中,该文件中必须存在根文件夹,并且其中包含插件的文件以及meta.txt文件。通过根文件夹的名称,QGIS插件管理器会将本地安装的插件与存储库中可用的插件进行匹配。这种比较的功能将在下面的“本地插件与存储库中的插件之间的通信 ”部分中讨论。一个可行的QGIS插件在其目录中应该只包含两个必需的文件: - __init__.py是插件的起点。该文件必须包含classFactory()方法。
- metadata.txt-包含有关插件的常规信息。
在这里可以找到带有最少文件集的插件示例。您可以在官方文档中更详细地研究插件的结构。元数据文件
如前所述,每个插件的目录中必须有一个meta.txt文件,其中包含有关插件的常规信息。来自它的信息用于显示在QGIS插件管理器中,搜索插件等。元数据文件结构应如下所示:[general]
Parameter1_Name: Parameter1_Value
Parameter2_Name: Parameter2_Value
…
ParameterN_Name: ParameterN_Value
要么:[general]
Parameter1_Name= Parameter1_Value
Parameter2_Name= Parameter2_Value
…
ParameterN_Name= ParameterN_Value
您可以使用冒号或“ =”符号作为参数名称及其值的分隔符。但是,没有必要在单个元数据文件中仅存在一种类型的定界符。分隔符之前和之后的空格不会影响从metadata.txt读取数据,因此,它们可以是任意数量或完全不存在。还请注意,在元数据文件的开头需要关键字“ [general]”。所需的参数如下,如果没有这些参数,则插件可能会中断:- 名称-插件名称,
- 版本-插件版本,
- qgisMinimumVersion是适合与此插件一起使用的QGIS的最低版本。
您可以在此处找到有关其他参数的信息。plugins.xml
每个存储库都应包含一个plugins.xml文件,该文件为插件管理器提供有关存储库中所有可用插件的常规信息。plugins.xml的结构应如下所示:<plugins>
<pyqgis_plugin name="Plugin1_Name" version="Plugin1_Version">
<Plugin1_Parameter1_Name>Plugin1_Parameter1_Value</Plugin1_Parameter1_Name>
<Plugin1_Parameter2_Name>Plugin1_Parameter2_Value</Plugin1_Parameter2_Name>
....
<Plugin1_ParameterN_Name>Plugin1_ParameterN_Value</Plugin1_ParameterN_Name>
</pyqgis_plugin>
...
<pyqgis_plugin name="PluginN_Name" version="PluginN_Version">
<PluginN_Parameter1_Name>PluginN_Parameter1_Value</PluginN_Parameter1_Name>
<PluginN_Parameter2_Name>PluginN_Parameter2_Value</PluginN_Parameter2_Name>
....
<PluginN_ParameterN_Name>PluginN_ParameterN_Value</PluginN_ParameterN_Name>
</pyqgis_plugin>
</plugins>
可以中断存储库的必需参数如下:- name-插件的名称(表示为pyqgis_plugin标记的参数)
- 版本-插件的版本(指定为pyqgis_plugin标记的参数),
- qgis_minimum_version-适合与此插件一起使用的QGIS的最低版本,
- download_url-带有插件的zip归档文件所在的URL。
建议研究来自官方QGIS信息库的示例plugins.xml文件(将链接末尾的数字替换为计算机上安装的QGIS版本)。本地插件和存储库中的插件之间的关系
插件管理器如何理解您计算机上安装的某个插件和连接的存储库中的某个插件是同一插件,例如,以检查该存储库中是否出现了新版本的插件?无需赘述技术细节,连接插件的规则如下:如果插件根文件夹的名称与从file_name标记到第一点的文本匹配,或者如果缺少file_name标记,则QGIS插件管理器将本地插件和存储库中的插件视为同一插件。带有文本的文本,该文本位于download_url标记中最后一个路径元素的第一点。换句话说,如果从plugins.xml的插件描述中出现了file_name标记,则将从中提取到第一点的部分(以粗体突出显示),该部分必须与已安装插件的根文件夹名称完全相同,以便QGIS插件管理器将其视为一个相同的插件。
如果缺少file_name标记,那么将以相同的方式解析download_url标记中的最后一个路径元素。从它提取到第一点的部分(以粗体突出显示)也必须与已安装插件的根文件夹名称完全相同,以便QGIS插件管理器将它们视为同一插件。
如果根文件夹的名称与从file_name提取的部分或从download_url提取的部分(如果缺少file_name)之间不匹配,则将这些插件视为不同的插件。<file_name>PluginName.2.1.0.zip</file_name>
<download_url>YourRepositoryURL/PluginName.2.1.0.zip</download_url>
考虑到此规则,建议在plugins.xml文件的插件描述中添加file_name标记,该标记不表示zip归档文件的名称,而是插件的根文件夹的名称,您可以选择在其中添加版本或其他信息,并用点将它们分开。在这种情况下,您可以根据需要使用插件命名zip归档文件,包括按照官方存储库中的惯例,用连字符分隔插件的名称及其版本。正确设计的插件示例
例子1
插件文件结构
FolderName.SomeInfo.zip
---FolderName
------__init__.py
------metadata.txt
Metadata.txt文件
[general]
name: PluginName
version: 2.1.0
qgisMinimumVersion: 3.0
Plugins.xml文件
<plugins>
<pyqgis_plugin name="PluginName" version="2.1.0">
<qgis_minimum_version>3.0.0</qgis_minimum_version>
<download_url>YourRepositoryURL/FolderName.SomeInfo.zip</download_url>
</pyqgis_plugin>
</plugins>
在此示例中,计算机上本地安装的插件与存储库中的插件之间的连接是通过根文件夹的名称和download_url标记完成的。因此,到第一点的zip存档名称的一部分和插件的根文件夹的名称必须完全匹配。例子2
插件文件结构
ArchiveName.SomeInfo.zip
---FolderName
------__init__.py
------metadata.txt
Metadata.txt文件
[general]
name: PluginName
version: 2.1.0
qgisMinimumVersion: 3.0
Plugins.xml文件
<plugins>
<pyqgis_plugin name="PluginName" version="2.1.0">
<qgis_minimum_version>3.0.0</qgis_minimum_version>
<file_name>FolderName.SomeInfo</file_name>
<download_url>YourRepositoryURL/ArchiveName.SomeInfo.zip</download_url>
</pyqgis_plugin>
</plugins>
在此示例中,计算机上本地安装的插件与存储库中的插件之间的连接是通过根文件夹的名称和file_name标记进行的。在这种情况下,zip存档名称的第一部分和根文件夹的名称可能会有所不同。创建存储库
QGIS插件存储库应包含plugins.xml文件,该文件为插件管理器提供有关存储库中所有可用插件以及包含插件本身的zip归档文件的常规信息。该存储库可以托管在GitHub或Bitbucket等Web服务上。QGIS识别此类存储库的一项重要要求是通过直接链接访问文件。例如,可以使用Github页面或Bitbucket页面来完成。 Google云端硬盘或DropBox不适用于这些目的。它们不允许直接链接到... / filename.extension格式的文件。有关使用GitHub托管静态网站的说明,请参见此处。有关如何使用Bitbucket托管静态网站的说明,请参见此处。通常,您只需要根据模板重命名存储库:(username.imtqy.com
对于GitHub)或username.bitbucket.io
(对于Bitbucket)在进行必要的设置后,指向QGIS存储库的链接将如下所示:(username.imtqy.com/plugins.xml
对于GitHub)或username.bitbucket.io/plugins.xml
(对于Bitbucket)必须指定此链接连接新存储库时,请在QGIS插件管理器的URL字段中输入。如果到存储库的连接成功,则存储库的状态将设置为“已连接”,并且plugins.xml文件中描述的插件将显示在可用插件列表中。