为什么docker compose python找不到气流操作符的模块
我正在为docker airflow postgres etl进行测试。我的项目结构当前如下所示:为什么docker compose python找不到气流操作符的模块,python,docker,docker-compose,airflow,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_post
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导入代码为:
从operators.pandasel_etl_over_postgres_operator导入pandasetloverpostgres运算符
我尝试了以下两种选择,它们也给出了相同的错误
from .operators.pandas_etl_over_postgres_operator import PandasETLOverPostgresOperator
及
导入在本地工作正常,但在我使用docker compose构建和运行时失败。请注意,对于airflow,默认情况下,
[core]
dags\u文件夹的值将为/usr/local/afflow/dags
,这意味着airflow将在路径/usr/local/afflow/dags>中查找DAG
因此,您的所有dags代码都应位于该文件夹中,因此,为了使代码正常工作,您需要更改以下几项:
- 在
docker compose.yml
文件中:
- 在
pandas_etl.py
文件中:
希望有帮助 请注意,对于气流,默认情况下,[core]
dags\u文件夹
的值为/usr/local/afflow/dags
,这意味着气流将在路径/usr/local/afflow/dags
中查找DAG
因此,您的所有dags代码都应位于该文件夹中,因此,为了使代码正常工作,您需要更改以下几项:
- 在
docker compose.yml
文件中:
- 在
pandas_etl.py
文件中:
希望有帮助 我认为这是因为您需要将运算符放在插件目录中,并将其装入容器中。看看关于插件的Puckle文档。通过检查配置文件,您还可以查看和更改特定airflow实例查找插件的位置。我认为这是因为您需要将操作员放入插件目录中,并将其装入容器中。看看关于插件的Puckle文档。通过检查配置文件哪个文件是运行此项目的入口点,您还可以查看并更改特定airflow实例查找插件的位置?。我相信如果您将根文件夹的绝对路径添加到sys.path
,那么您就可以导入该模块。@Thilak这里是repo的一个示例。是否需要将ENV PYTHONPATH=/usr/local/aiffair
添加到Dockerfile
@Thilak导入之前,我尝试添加sys.path.append(os.path.join(os.path.dirname(sys.path[0]),'operators')
到pandas\u etl.py
,但是仍然会出现错误未找到模块
运行此项目的入口点是哪个文件?。我相信如果您将根文件夹的绝对路径添加到sys.path
,那么您就可以导入该模块。@Thilak这里是repo的一个示例。是否需要将ENV PYTHONPATH=/usr/local/aiffair
添加到Dockerfile
@Thilak导入之前,我尝试添加sys.path.append(os.path.join(os.path.dirname(sys.path[0]),“operators”)
到pandas\u etl.py
,但仍然无法找到错误module
from ..operators.pandas_etl_over_postgres_operator import PandasETLOverPostgresOperator
- ./dags:/usr/local/airflow/dags/dags
- ./logs:/usr/local/airflow/dags/logs
- ./operators:/usr/local/airflow/dags/operators
from operators.pandas_etl_over_postgres_operator import PandasETLOverPostgresOperator