【发布时间】:2018-06-28 10:27:38
【问题描述】:
我正在 Cloud Composer 上开发 DAG;我的代码被分成一个主要的 python 文件和一个带有子文件夹的包,它看起来像这样:
my_dag1.py
package1/__init__.py
package1/functions.py
package1/package2/__init__.py
package1/package2/more_functions.py
我更新了package1/functions.py 上的一个函数以获取附加参数(并更新my_dag1.py 中的引用)。该代码将在我的本地环境中正确运行,并且在运行时我没有收到任何错误
gcloud beta composer environments run my-airflow-environment list_dags --location europe-west1
但是 Web UI 引发了 python 错误
TypeError: my_function() 得到了一个意外的关键字参数 '新参数'
我尝试重命名函数,错误变为
NameError: name 'my_function' is not defined我尝试更改 DAG 的名称并将文件上传到压缩和解压缩的 dag 文件夹,但没有任何效果。
只有在我重命名包文件夹后,错误才消失。
我怀疑这个问题与调度程序接收 my_dag1.py 而不是 package1/functions.py 有关。该错误突然出现,因为我在前几周进行了类似的更新。
知道如何在不重构整个代码结构的情况下解决此问题吗?
EDIT-1
Here's the link 到 Google 网上论坛的相关讨论
【问题讨论】:
-
能否分享您从相关文件中导入的内容?
-
导入使用以下语法:
from package1.functions import my_function,它们在我的本地 Airflow 环境中正常工作(以及在我将属性添加到函数之前在 Cloud Composer 中) -
我在 Cloud Composer 上遇到了一些类似的问题(但在本地环境中没有),调试起来真的很痛苦。您是否尝试删除您的文件 (
gcloud beta composer environments storage dags delete --environment my-airflow-environment --location europe-west1 <your directory>) 并重新上传它们?这也可能是 Web UI 上的问题,但无法在 Cloud Composer 上重新启动 Web 服务器。作为最后的手段,您能否尝试在新创建的 Cloud Composer 环境中上传文件,看看是否可行?这可能有助于隔离您的问题。 -
我使用 Cloud Storage Web 界面删除了所有文件,但没有帮助。下次遇到此问题时,我将尝试使用 composer 控制台命令,看看是否有什么不同。感谢您的建议!
标签: airflow airflow-scheduler google-cloud-composer