如何使用Python在DAG中导入外部脚本?
我的结构如下: 我尝试将脚本导入如何使用Python在DAG中导入外部脚本?,python,python-3.x,python-import,airflow,Python,Python 3.x,Python Import,Airflow,我的结构如下: 我尝试将脚本导入inbound_层的一些文件中,如下所示: 导入计算 但是,我在Airflow web上收到以下错误消息: 有什么想法吗?对于气流DAG,当您导入自己的模块时,您需要确保两件事: 模块在哪里?您需要找到文件夹中的根路径。例如,在“我的开发”框中,文件夹包括: ~/projects/data/afflow/teams/team\u name/projects/default/dags/dag\u names/dag\u files.py 根是气流,所以如果我
inbound_层的一些文件中,如下所示:
导入计算
但是,我在Airflow web上收到以下错误消息:
有什么想法吗?对于气流DAG,当您导入自己的模块时,您需要确保两件事:
模块在哪里?您需要找到文件夹中的根路径。例如,在“我的开发”框中,文件夹包括:
~/projects/data/afflow/teams/team\u name/projects/default/dags/dag\u names/dag\u files.py
根是气流,所以如果我把我的模块放入
~/projects/data/afflow/teams/teams\u name/common
那么我需要使用
from teams.team_name.common import my_module
在您的情况下,如果根目录是bi的上部文件夹,并且您将calc的脚本放在bi/inbound\u layer/test.py
中,那么您可以使用:
from bi.inbound_layer.test import calc
您必须确保目录结构中有\\uu init\\uuuuupy
文件,以便导入正常工作。路径中的每个文件夹中都应该有一个空文件\\uuu init\\uuuu.py
。它表示此目录是airflow软件包的一部分。在您的情况下,您可以使用bi和“入站”层文件夹下的touch\\\\\\\\\\\\\\.py
(cli)创建空的\\\\\\\\\\.py
我需要在ren.py的顶部插入以下脚本:
导入系统,操作系统
从airflow.models导入变量
dagbacks\u DIR=变量.get('dagbacks\u DIR')
sys.path.append(dagbacks\u DIR+/bi/inbound\u layer/)
通过这种方式,我可以使用当前的文件夹包。默认情况下,Airflow在Airflow home中将dags/、plugins/、config/
目录添加到PYTHONPATH
中,因此您可以在dags
文件夹下创建文件夹commons
,在那里创建文件(scriptFileName
)。假设脚本中有某个类(GetJobDoneClass
)要导入到DAG
中,可以这样做:
from common.scriptFileName import GetJobDoneClass
如果您正在使用pycharm并将包添加到项目依赖项中,那么您可以导入它,否则您必须在路径中添加所需的包才能运行它。听起来似乎需要将包添加到您的路径中。请参见示例。根路径是什么意思?这就是加载DAG的路径吗?这里,我提到的路径根是$PYTHONPATH中定义的路径。您可以在env中使用“echo$PYTHONPATH”来获取它。顺便说一句,请对答案进行投票。或者,你可以简单地将“bi”添加到你的系统路径中。谢谢,我将发布我的具体解决方案,你的提示真的帮助了我!这就是工作。如果我们不想把它放在DAG下面怎么办?还有DAG旁边的另一个文件夹。它是如何工作的?