You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 12:40:14