如何配置Python包使其成为PyMoDAQ可识别的HDF5数据导出器插件?
PyMoDAQ数据导出器插件未被识别的排查要点
1. 包结构与命名规范
- 包名需以
pymodaq_plugins_开头(你已满足),内部必须包含daq_utils/export目录,导出器类需放置在此路径下,例如:pymodaq_plugins_nexus_exporter/daq_utils/export/nexus_hdf5_exporter.py - 导出器类必须继承PyMoDAQ的
ExporterBase基类,同时实现export_data核心方法,以及类属性name(显示在插件列表的名称)、extension(对应文件后缀,如.h5或.nexus)
2. 入口点配置(setup.py/pyproject.toml)
PyMoDAQ通过setuptools入口点自动发现插件,必须在打包配置中声明:
- 若使用
setup.py,添加:setup( ... entry_points={ 'pymodaq.exporters': [ 'nexus_hdf5 = pymodaq_plugins_nexus_exporter.daq_utils.export.nexus_hdf5_exporter:NexusHDF5Exporter', ], }, ... ) - 若使用
pyproject.toml(推荐),添加:
其中键(nexus_hdf5)为插件标识,值需严格遵循[project.entry-points."pymodaq.exporters"] nexus_hdf5 = "pymodaq_plugins_nexus_exporter.daq_utils.export.nexus_hdf5_exporter:NexusHDF5Exporter"模块路径:类名格式,对应你的导出器类位置。
3. 类的元数据与基类继承检查
- 确保导出器类正确导入并继承基类:
from pymodaq.daq_utils.export import ExporterBase - 必须定义类级别的
name和extension属性,示例:class NexusHDF5Exporter(ExporterBase): name = "Nexus HDF5" # 会显示在导出选项列表中 extension = ".h5" def export_data(self, data, filename, **kwargs): # 你的HDF5导出逻辑实现 pass - 不要遗漏
**kwargs参数,基类方法要求传入该参数,否则可能导致实例化失败。
4. 包的安装方式
- 必须以可编辑模式安装插件包,确保PyMoDAQ能识别最新代码:
非可编辑模式安装可能引发路径识别问题,尤其在开发阶段。pip install -e .
5. 调试与日志排查
- 手动触发插件发现逻辑,在PyMoDAQ环境中运行以下代码查看加载情况:
若输出中无你的导出器,说明入口点配置有误;若存在但未显示在UI列表,检查from pymodaq.utils.factory import ObjectFactory exporter_factory = ObjectFactory('pymodaq.exporters') print(exporter_factory.available_objects)name属性是否定义正确。 - 查看PyMoDAQ日志文件(通常位于用户目录下的
.pymodaq/logs),搜索exporters或你的包名,确认是否存在导入异常等加载错误。
6. 依赖与环境一致性
- 确保你的包依赖的HDF5库(如
h5py)已安装,且版本与PyMoDAQ兼容 - 确认PyMoDAQ与你的插件包处于同一Python环境(避免conda/pip环境冲突)
内容的提问来源于stack exchange,提问作者Sébastien Weber
相关产品推荐
相关产品推荐

