在AWS Glue中使用Paramiko连接SFTP时遇导入错误求助
解决AWS Glue作业中Paramiko依赖问题
问题分析
本地运行正常的Paramiko SFTP连接代码部署到AWS Glue时出现两类问题:
NoModuleFoundError: paramiko:Glue默认环境未预装ParamikoImportError: cannot import name 'asn1' from 'cryptography.hazmat.bindings._rust':手动上传Paramiko后,依赖的cryptography版本与Glue环境不兼容(多因版本冲突或Rust绑定组件缺失)
解决方案
方案1:使用Glue附加模块参数自动安装兼容版本
这是最简便的方式,让Glue自动处理依赖匹配:
- 打开AWS Glue控制台,进入目标作业的编辑页面
- 在Job parameters区域,添加以下参数:
- 键:
--additional-python-modules - 值:
paramiko==2.12.0,cryptography==38.0.4
版本说明:该组合适配Glue 3.0/4.0(Python 3.9/3.10);若使用Glue 2.0(Python 3.7),可调整为
paramiko==2.9.2,cryptography==3.4.8 - 键:
- 保存作业并重新运行
方案2:手动上传兼容的预编译whl包
若因网络限制无法从PyPI下载,可手动上传对应平台的whl包:
- 下载适配Linux x86_64平台的预编译包:
- Paramiko:
paramiko-2.12.0-py2.py3-none-any.whl - cryptography:
cryptography-38.0.4-cp36-abi3-manylinux_2_28_x86_64.whl
- Paramiko:
- 将两个包上传到S3存储桶的指定路径(如
s3://your-glue-libs/) - 在Glue作业编辑页面的Python library path中填入该S3路径
- 保存并重新运行作业
方案3:验证环境依赖版本(排查用)
若仍有问题,可在代码开头添加以下代码确认当前环境的依赖版本,便于调整适配:
import sys import cryptography print(f"Python版本: {sys.version}") print(f"cryptography版本: {cryptography.__version__}")
注意事项
- 确保选择的Paramiko与cryptography版本兼容,可参考Paramiko官方文档的依赖说明
- Glue作业运行在Linux实例上,必须上传manylinux_x86_64架构的预编译whl包,不可使用Windows/macOS版本
内容的提问来源于stack exchange,提问作者prafful
相关产品推荐
相关产品推荐

