Python 导入外部/dag目录
我无法将公共代码移到airflow使用的dag目录之外。我查了一下房间,发现了 是否可以使用Python 导入外部/dag目录,python,airflow,Python,Airflow,我无法将公共代码移到airflow使用的dag目录之外。我查了一下房间,发现了 是否可以使用imp.load\u source加载dag目录之外的模块?在下面的示例中,这将从公共目录导入foo或bar ── airflow_home |──── dags │ ├── dag_1.py │ └── dag_2.py ├── common ├── foo.py └── bar.py 只需在所有3个文件夹中添加\uu
imp.load\u source
加载dag目录之外的模块?在下面的示例中,这将从公共目录导入foo或bar
── airflow_home
|──── dags
│ ├── dag_1.py
│ └── dag_2.py
├── common
├── foo.py
└── bar.py
只需在所有3个文件夹中添加
\uuuuu init\uuuuu.py
文件即可。它应该会起作用。
事实上,我的文件夹结构中的每个文件夹都具有\uuuu init\uuuuuuu.py
。我可以运行代码并查看输出
文件夹结构示例如下:
── airflow_home
├── __init__.py
|──── dags
│ ├── __init__.py
│ ├── dag_1.py
│ └── dag_2.py
├── common
├── __init__.py
├── foo.py
└── bar.py
和dag_1.py代码可以是:
from stackoverflow.src.questions.airflow_home.common.bar import bar_test
def main():
bar_test()
main()
我正在从我的pycharm
运行这段代码。
my pycharm中您的airflow\u home
文件夹路径是stackoverflow/src/questions/airflow\u home/
并且条形图。py代码为
def bar_test():
print "bar hara"
除了添加
\uuuu init\uuuuu.py
文件外,其他方法是在dag脚本顶部添加以下include:
导入系统
导入操作系统
sys.path.insert(0,os.path.abspath(os.path.dirname(_文件__)))
将气流回家路径添加到PYTHONPATH
export AIRFLOW_HOME=/usr/local/airflow
export PYTHONPATH="${PYTHONPATH}:${AIRFLOW_HOME}"
Dockerfile
ENV AIRFLOW_HOME=/usr/local/airflow
ENV PYTHONPATH "${PYTHONPATH}:${AIRFLOW_HOME}"
遇到同样的问题后,这为我解决了: 导入系统,操作系统 sys.path.insert(0,os.path.abspath(os.path.join(os.path.dirname(文件),os.path.pardir)))
从common.foo import*是否所有这些文件夹都属于同一个应用程序模块?或不同的模块。以防所有应用程序都来自同一个应用程序模块,您可以使用相对路径进行导入。@Haranadh yes。我更新了图表以显示主目录。我无法在注释中回答。我贴出了详细的答案。如果你喜欢的话。请投票。:)通过修改PYTHONPATH的解决方法发布在这里:@connorameres;希望这个答案有帮助。如果有的话。请接受我的回答。如果在您的设置中不起作用,请告诉我。我的气流主路径是/usr/local/afflow。。。from语句类似于:“from usr.local.afflow”。。。它声明了一个错误“没有模块名usr”。我该怎么办?