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



我的项目结构是这样的:

  • /definitions(所有dagster python定义)
    • __init__.py
    • repositories.py
    • /汇率
      • 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。dagsterimportterror:在从文件C:UsersKlausPycharmProjects dagsterexchangates definitionsrepositories.py导入模块库时遇到importterror:attempted relative import with no known parent package。考虑对基于cli的目标或python_package工作空间使用基于模块的选项-m。yaml的目标。

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

(stacktrace出现在此之前)
ModuleNotFoundError: No module named 'definitions'

如何解决这个问题?

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

EDIT2:反映目录结构的更改

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

要使它与'-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
顺便提一下,您的示例包含一个工作区。这应该会导致dagit和其他Dagster进程自动为您启动gRPC服务器,因此根据您的目标,您可能根本不需要自己运行dagster api grpc

相关内容

最新更新