Flit打包GDAPS插件时模块路径找不到的Django问题求助
命名空间模块插件加载失败:ModuleNotFoundError
问题背景
创建medux_timetrackerPython模块,打包为GDAPS插件并配置entry point。entry point被识别,但对应模块无法找到。通过主项目虚拟环境,在medux-timetracker目录执行flit install --symlink .安装模块。
pyproject.toml配置
[build-system] requires = ["flit_core >=3.2,<4"] build-backend = "flit_core.buildapi" [project] name = "medux_timetracker" # ... [tool.flit.module] name="medux.plugins.timetracker:apps.TimeTrackerConfig" # medux.plugins是命名空间模块。 [project.entry-points."medux.plugins"] timetracker = "medux.plugins.timetracker"
Django配置与插件加载逻辑
模块中的TimeTrackerConfig类继承自Django的AppConfig。settings.py中通过以下代码动态添加插件应用:
# settings.py INSTALLED_APPS = [ # ... ] INSTALLED_APPS += PluginManager.find_plugins("medux.plugins")
PluginManager的find_plugins方法负责加载entry points,但iter_entry_points未返回任何内容,循环从未执行:
@classmethod def find_plugins(cls, group: str) -> List[str]: """从setuptools entry points查找插件。 该函数应在settings.py的INSTALLED_APPS变量之后调用.... :param group: 查找插件应用的点分路径,作为setuptools entry points的'group'。 :returns: 可追加到INSTALLED_APPS的点分应用名称列表。 """ # ... cls.group = group # ="medux.plugins" installed_plugin_apps = [] # 此处iter_entry_points无返回,循环从未执行: for entry_point in iter_entry_points(group=group, name=None): appname = entry_point.module_name if entry_point.attrs: appname += "." + ".".join(entry_point.attrs) installed_plugin_apps.append(appname) logger.info("Found plugin '{}'.".format(appname)) return installed_plugin_apps
启动错误信息
File "/home/christian/Projekte/medux/.venv/lib/python3.10/site-packages/django/apps/config.py", line 193, in create import_module(entry) File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1050, in _gcd_import File "<frozen importlib._bootstrap>", line 1027, in _find_and_load File "<frozen importlib._bootstrap>", line 1004, in _find_and_load_unlocked ModuleNotFoundError: No module named 'medux.plugins.timetracker'
排查现状
- GDAPS已识别pyproject.toml中的entry point,
medux.plugins.timetracker已正确追加到INSTALLED_APPS - 虚拟环境
site-packages目录结构:
medux/ plugins/ timetracker -> /home/christian/Projekte/medux-timetracker # 符号链接 medux_timetracker-0.0.1.dist-info/ direct_url.json entry_points.txt INSTALLER METADATA RECORD REQUESTED
- 符号链接已存在,但模块仍无法找到,怀疑PYTHONPATH问题但无法定位
内容的提问来源于stack exchange,提问作者nerdoc
相关产品推荐
相关产品推荐

