在Airflow DAG中使用rapidjson报错:No module named 'rapidjson'求助
一、模块安装不生效的核心原因
你手动在EC2实例上执行pip install python-rapidjson验证成功,但Airflow UI仍报错找不到模块,核心原因是Airflow运行使用的Python环境,和你执行pip命令的环境不一致。Airflow通常会绑定特定的Python解释器(比如虚拟环境、独立的系统Python路径),直接用全局pip安装的库不会被Airflow进程识别。
二、解决模块找不到的问题
1. 定位Airflow绑定的Python解释器
在每个Airflow实例(scheduler、webserver、workers)上,执行以下命令找到Airflow对应的Python路径:
# 查看Airflow关联的Python版本及路径 airflow info | grep "Python Version" # 或者直接查找airflow命令的路径,推导Python位置 which airflow
假设输出的airflow路径为/usr/local/bin/airflow,对应的Python解释器通常是同目录下的python3(即/usr/local/bin/python3)。
2. 在Airflow的Python环境中安装依赖
用查到的Python路径执行安装命令,确保三个实例都执行:
/usr/local/bin/python3 -m pip install python-rapidjson==1.5.5
3. 验证环境匹配性
安装完成后,用Airflow的Python解释器测试导入:
/usr/local/bin/python3 -c "import rapidjson; print(rapidjson.__version__)"
如果能正常输出版本号,说明依赖已安装到Airflow能识别的环境中。
三、requirements.txt的正确使用方式
你在Git仓库添加了requirements.txt,但需要先将文件同步到EC2实例的正确目录,再执行安装:
1. 找到Airflow的DAG根目录
执行命令获取Airflow配置的DAG文件夹路径:
airflow config get-value core dags_folder
2. 进入DAG目录并安装依赖
因为你的Git代码合并后会自动同步到Airflow UI,说明仓库内容已同步到该DAG目录。进入目录后执行安装:
cd $(airflow config get-value core dags_folder) /usr/local/bin/python3 -m pip install -r requirements.txt
如果自动同步未包含requirements.txt,需检查你的CI/CD同步机制,确保整个仓库内容(包括该文件)被同步到EC2实例的DAG目录。
四、长期固化依赖的方案
为避免每次手动操作,建议将依赖安装集成到部署流程中:
- 如果用AWS部署工具(CloudFormation/Terraform),在实例启动脚本中加入Airflow环境的pip安装命令。
- 调整CI/CD流程,在同步代码到EC2后,自动执行
python -m pip install -r requirements.txt(使用Airflow绑定的Python解释器)。
五、必要的收尾操作
安装依赖后,必须重启所有Airflow服务,确保进程加载新安装的模块:
# 重启scheduler sudo systemctl restart airflow-scheduler # 重启webserver sudo systemctl restart airflow-webserver # 重启Celery worker(如果使用CeleryExecutor) sudo systemctl restart airflow-worker
内容的提问来源于stack exchange,提问作者x89

