在MWAA中同时使用自定义Wheel与PyPI依赖遇阻求助
问题分析与修复方案
核心错误点
--no-index参数误用
这个参数会强制pip不从任何PyPI源下载依赖,只从--find-links指定的路径查找。你的PyPI依赖(比如awswrangler、sagemaker)根本不在本地find-links路径里,自然会报ModuleNotFoundError。路径不匹配本地运行器结构
你写的/usr/local/airflow/plugins/plugins是线上MWAA容器的路径,但本地运行器中,plugins.zip的内容会被挂载到/usr/local/airflow/plugins目录下,而你的wheel包是放在plugins.zip根目录,所以路径完全不对。
修正步骤
1. 调整requirements.txt配置
移除--no-index,修正--find-links路径,同时简化自定义wheel的引用:
--find-links /usr/local/airflow/plugins apache-airflow-providers-snowflake==4.0.2 apache-airflow-providers-mysql==4.0.0 awswrangler==2.19.0 sagemaker==2.140.1 example_wheel.whl
- 去掉
--no-index后,pip会优先从--find-links找自定义包,找不到的公共依赖自动从PyPI拉取 --find-links指向本地运行器中wheel包的实际挂载目录- 直接写
example_wheel.whl即可,因为--find-links已经指定了目录
2. 修正plugins.zip打包方式
- 确保
example_wheel.whl直接放在plugins.zip的根目录,不要嵌套在plugins子文件夹里 - 打包时,进入你的本地
plugins目录,直接压缩里面的所有内容(包括wheel包),而不是压缩plugins目录本身
3. 本地运行验证
启动本地运行器后,可进入容器检查依赖安装情况:
docker exec -it mwaa-local-runner-airflow-webserver-1 pip list
查看输出中是否包含awswrangler、sagemaker以及你的自定义wheel包名称。
内容的提问来源于stack exchange,提问作者Or Bar Yaacov
相关产品推荐
相关产品推荐

