我的项目结构是这样的:
- /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
。