简述:我可以通过$ python my_dag.py
来运行dag,但是通过Airflow UI,它会声明错误No module named 'my_file_to_be_imported'
。
我有一个容器,其中有一个dags
和lutils
(来自我的自定义文件夹)的git文件夹,它们映射为airflow home内部的卷,如下所示:
── airflow_home
|──── dags
│ ├── __init__.py
| ├── my_dag.py
├──── lutils
├── __init__.py
├── my_file_to_be_imported.py
my_dag.py
文件夹中的dags
文件需要从lutils
文件夹中读取内容。
my_dag.py
(简体)的定义如下:
import sys
sys.path.append('../')
from lutils import my_file_to_be_imported
def do_something():
my_file_to_be_imported.beauty_imported_method()
t1 = PythonOperator(
task_id='test_generate',
python_callable=do_something,
dag=dag)
my_file_to_be_imported.beauty_imported_method() #to check if python runs
print (my_file_to_be_imported.var) #to check if python runs
和my_file_to_be_imported
文件夹中的lutils
文件为:
def beauty_imported_method():
with open('text.txt', 'a') as f:
f.write("test")
var = "my test var"
如果我使用bash $ python my_dag.py
(作为python脚本)运行,它将执行beauty_imported_method
并打印var
变量。
但是在内部气流中,有一个红色警告说:Broken DAG: [path_to_airflow_home/dags/my_dag.py] No module named 'my_file_to_be_imported'
我该如何解决airflow
像python run
那样理解我的导入的事情?
我已经阅读了this在stackoverflow中一个非常封闭的问题,但是没用。
P.s .:此docker安装程序可以很好地运行其他不依赖相对导入的dag。
答案 0 :(得分:0)
如@ tobi6所述,您应该将两个变量PYTHONPATH和AIRFLOW_HOME定向到适当的文件夹。在您的情况下,我认为PYTHONPATH未设置或设置错误。
应如下所示:
export PYTHONPATH=/path/to/airflow_home