【问题标题】:How to start the grpc server when definitions are in a module定义在模块中时如何启动grpc服务器
【发布时间】:2021-04-27 19:56:26
【问题描述】:

我的项目结构如下:

  • /definitions(适用于所有 dagster python 定义)
    • __init__.py
    • repositories.py
    • /exchangerates
      • pipelines.py
      • ...
    • ...
  • workspace.yaml

我尝试过使用各种方法运行 grpc 服务器,尤其是以下方法(从项目根目录开始):

  • dagster api grpc -h 0.0.0.0 -p 4000 -f definitions/repositories.py
  • dagster api grpc -h 0.0.0.0 -p 4000 -m definitions
  • dagster api grpc -h 0.0.0.0 -p 4000 -m definitions.repositories

第一个命令产生以下错误:

dagster.core.errors.DagsterImportError:遇到 ImportError:attempted relative import with no known parent package 从文件 C:\Users\Klaus\PycharmProjects\dagsterexchangerates\definitions\repositories.py 导入模块存储库时。考虑将基于模块的选项 -m 用于基于 CLI 的目标或 python_packageworkspace.yaml 目标。

第二个和第三个命令产生以下错误:

(堆栈跟踪在此之前)
ModuleNotFoundError: 没有名为“定义”的模块

如何解决?

编辑: 我已将我正在处理的示例的当前版本上传到 GitHub:https://github.com/kstadler/dagster-exchangerates

编辑2: 反映目录结构的变化

【问题讨论】:

    标签: dagster


    【解决方案1】:

    很抱歉给您带来麻烦 - 这里有几个选项可以让您的服务器运行。

    要使其与“-f”选项一起使用,需要将相对导入替换为绝对导入。看起来像这样:

    -from .pipelines import exchangerates_pipline
    -from .partitions import year_partition_set
    +from definitions.pipelines import exchangerates_pipline
    +from definitions.partitions import year_partition_set
    

    (如果您尝试直接运行 python definitions/repositories.py,也会遇到同样的错误)。

    我仍在深入研究为什么第三个“-m”选项没有按我预期的方式工作。奇怪的是,以下命令似乎对我有用,应该接近相同:

    python -m dagster.grpc -h 0.0.0.0 -p 4000 -m definitions.repositories
    

    顺便说一句,您的示例包含一个 workspace.yaml,它应该会导致 dagit 和其他 Dagster 进程为您自动启动该模块的 gRPC 服务器 - 因此,根据您的目标,您可能根本不需要自己运行 dagster api grpc .

    【讨论】:

    • 感谢您的回答!更改为绝对导入有效,grpc 服务器现在正在运行。不幸的是,我在将它应用到我的 docker compose 配置时遇到了另一个问题(所有服务都运行,但是当我在 dagit 中开始运行时,我收到了来自 docker 的错误请求(“无效的参考格式”)错误)跨度>
    猜你喜欢
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 2021-10-03
    • 2021-05-09
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    相关资源
    最近更新 更多