为什么docker-compose python没有为气流运算符找到模块

时间:2020-02-03 05:27:48

标签: python docker docker-compose airflow

我正在为docker-airflow postgres etl进行测试。我的项目结构目前如下所示:

docker-airflow
|
├── Dockerfile
├── __init__.py
├── dags
│   ├── __init__.py
│   ├── pandas_etl.py
│   └── tuto.py
├── docker-compose.yml
├── operators
    ├── __init__.py
    └── pandas_etl_over_postgres_operator.py

将我的pandas_etl_over_postgres_operator.py导入到pandas_etl.py dag中时,出现一个错误,提示找不到该模块。

pandas_etl.py导入代码为:


from operators.pandas_etl_over_postgres_operator import PandasETLOverPostgresOperator

我尝试了以下两种选择,它们也给出相同的错误。

from .operators.pandas_etl_over_postgres_operator import PandasETLOverPostgresOperator

from ..operators.pandas_etl_over_postgres_operator import PandasETLOverPostgresOperator

导入在本地工作正常,但是当我使用docker-compose构建和运行时失败。

2 个答案:

答案 0 :(得分:0)

请注意,对于气流,默认情况下,[core]> dags_folder的值为/usr/local/airflow/dags,这意味着气流将在路径/usr/local/airflow/dags处查找破损。 / p>

因此,您所有的dags代码都应位于该文件夹中,因此,您需要更改以下几点才能使代码起作用:

  • docker-compose.yml文件中:
- ./dags:/usr/local/airflow/dags/dags
- ./logs:/usr/local/airflow/dags/logs
- ./operators:/usr/local/airflow/dags/operators
  • pandas_etl.py文件中:
from operators.pandas_etl_over_postgres_operator import PandasETLOverPostgresOperator

希望有帮助!

答案 1 :(得分:0)

我认为这是因为您需要将操作员放入插件目录中并将其安装到容器中。查看有关插件here的Puckle文档。您还可以通过检查配置文件here

来查看并更改特定气流实例在何处查找插件。