AWS Glue连接SQL Server时pyodbc wheel包不兼容平台报错如何解决
报错根因
你使用的pyodbc-4.0.32-cp37-cp37m-win32.whl是Windows 32位平台编译的Python wheel包,而AWS Glue作业的运行底层是64位Amazon Linux系列操作系统,完全不兼容Windows平台的编译产物,因此无论换Python2还是Python3对应的Windows版本wheel包都无法解决问题。
报错信息:
com.amazonaws.services.glue.PythonModuleInstaller [main] ERROR: pyodbc-4.0.32-cp37-cp37m-win32.whl is not a supported wheel on this platform.
解决方案
方案1:直接通过PyPI安装(适用Glue作业可访问公网场景)
无需自行上传wheel包,直接修改作业参数--additional-python-modules的Value为pyodbc==4.0.32即可,Glue会自动拉取适配Linux运行环境的对应版本包。
方案2:离线场景自行上传适配的wheel包
如果Glue作业配置为无公网访问,按照以下步骤操作:
- 先确认当前使用的Glue版本对应的Python版本:
- Glue 2.0/3.0:对应Python 3.7,需下载文件名带
cp37、manylinux_x86_64后缀的wheel包 - Glue 4.0:对应Python 3.10,需下载文件名带
cp310、manylinux_x86_64后缀的wheel包
- Glue 2.0/3.0:对应Python 3.7,需下载文件名带
- 上传正确的wheel包到S3的对应路径,以Glue 3.0为例,正确的作业参数Value为:
pyodbc==4.0.32,s3://bucketname/python_scripts/python-libs/pyodbc-4.0.32-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl
额外注意事项
pyodbc依赖系统层面的ODBC驱动才能正常连接SQL Server,你需要在Python脚本开头添加以下代码安装对应依赖:
import subprocess # 安装unixODBC及SQL Server 17驱动(适配Amazon Linux 2环境) subprocess.run(['sudo', 'amazon-linux-extras', 'install', 'epel', '-y'], check=True) subprocess.run(['sudo', 'yum', 'install', '-y', 'unixODBC', 'unixODBC-devel'], check=True) subprocess.run(['sudo', 'yum', 'install', '-y', 'https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm'], check=True) subprocess.run(['sudo', 'yum', 'install', '-y', 'msodbcsql17'], check=True)
如果不想配置复杂的系统依赖,也可以替换使用pymssql库连接SQL Server,仅需在作业参数中添加pymssql==2.2.7即可直接使用。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

