Python 导入外部/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

我无法将公共代码移到airflow使用的dag目录之外。我查了一下房间,发现了

是否可以使用
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”。我该怎么办?