当定义在模块中时如何启动 grpc 服务器

How to start the grpc server when definitions are in a module

我的项目结构如下所示:

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

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

dagster.core.errors.DagsterImportError: Encountered ImportError: attempted relative import with no known parent package while importing module repositories from file C:\Users\Klaus\PycharmProjects\dagsterexchangerates\definitions\repositories.py. Consider using the module-based options -m for CLI-based targets or the python_package workspace.yaml target.

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

(stacktrace comes before this)
ModuleNotFoundError: No module named 'definitions'

如何解决?

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

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

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

要使其与“-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 你自己。