0

我的项目结构如下所示:

  • /definitions(适用于所有 dagster python 定义)
    • __init__.py
    • 存储库.py
    • /汇率
      • 管道.py
      • ...
    • ...
  • 工作区.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 导入模块存储库时。考虑为基于-mCLI 的目标或python_packageworkspace.yaml 目标使用基于模块的选项。

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

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

如何解决?

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

EDIT2:反映目录结构的变化

4

1 回答 1

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自己运行。

于 2021-01-23T18:48:56.130 回答