You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Glue脚本使用pg8000报ModuleNotFoundError求助

AWS Glue中pg8000库导入失败(ModuleNotFoundError)排查与解决

可能的问题点及对应解决方案

1. ZIP包内部结构错误

你的ZIP包需要直接在根目录包含pg8000模块文件夹(里面包含__init__.py及其他库文件),而非嵌套目录结构。

  • 验证方式:本地解压pg8000libs.zip,确认根目录下直接存在pg8000/文件夹,而非类似pg8000libs/pg8000/的嵌套结构。
  • 正确打包方式:在本地对应Python版本的环境中执行pip install pg8000 -t ./pg8000libs,进入pg8000libs目录后,将所有文件/文件夹打包为zip(注意不要把pg8000libs本身作为根目录打包)。

2. 冗余的sys.path手动配置

Glue的--extra-py-files参数会自动将指定的ZIP包添加到Python路径中,无需手动执行sys.path.insert(0, zip_path)。多余的路径插入可能导致加载顺序异常,直接删除以下两行代码:

zip_path = os.path.join('/tmp', 'pg8000libs.zip')
sys.path.insert(0, zip_path)

3. S3文件权限不足

确保Glue Job的执行IAM角色拥有对s3://mybucket/pg8000libs.zip的s3:GetObject权限,检查角色的权限策略是否包含对应S3资源的读取权限。

4. Python版本兼容性不匹配

Glue不同版本对应不同Python版本(如Glue 3.0对应Python 3.7),需安装与该版本兼容的pg8000版本:

  • 例如Glue 3.0需安装pg8000<=1.29.1(该版本支持Python 3.7),避免安装仅支持Python 3.8+的高版本pg8000。
  • 打包时务必在对应Python版本的环境下执行pip install,保证依赖包的兼容性。

5. Job参数配置格式错误

确保--extra-py-files参数的配置无多余注释,控制台配置时仅保留路径值:

--extra-py-files    s3://mybucket/pg8000libs.zip

(移除原配置中的//NOTE: my zip contains __init__.py注释,避免被解析为参数的一部分)

修正后的示例代码

import sys
import os
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
import boto3
from pyspark.sql import Row
from datetime import datetime, date

def dump_python_path():
    print("python path:", sys.path)

    for path in sys.path:
        if os.path.isdir(path):
            print(f"dir: {path}")
            print("\t" + str(os.listdir(path)))
        print(path)

print(os.listdir('/tmp'))
dump_python_path()
# Import the library
import pg8000

内容的提问来源于stack exchange,提问作者noobie-php

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 23:25:27