每次我从 Python 库路径调用 .egg 时,AWS Glue 作业都会崩溃

Posted

技术标签:

【中文标题】每次我从 Python 库路径调用 .egg 时,AWS Glue 作业都会崩溃【英文标题】:AWS Glue Job crashes everytime I call .egg from Python library path 【发布时间】:2019-06-04 10:51:24 【问题描述】:

我已经在本地运行了我的 Python 脚本并且它可以工作。我打算与 PostgreSQL 数据库进行简单连接并执行查询。为此,我需要导入以下 python 模块:

将熊猫导入为 pd 将 pandas.io.sql 导入为 psql 导入 boto3 将 psycopg2 导入为 pg

前三个,AWS Glue Job 已经可用。 psycopg2 必须以 .egg 文件的形式导入,如 https://www.helicaltech.com/external-python-libraries-aws-glue-job/ 所示,然后在 S3 存储桶中提供。

因此,我使用我的简单脚本创建了我的 AWS Glue 作业,并将 .egg 文件添加为我的 Python 库路径。当代码运行时,它会识别前三个模块。后者成功打开 .egg 文件。但是,当它到达 init.py 文件时,它会在它看到的第一件事上崩溃:

从 psycopg2._psycopg 导入 (...)。

我做错了什么? init.py 是否应该为空?我尝试过使用其他库,但它总是在 init.py

的第一行崩溃

【问题讨论】:

我看到文件 _psycopg.pyd 是被调用但未被找到的文件。难道是AWS无法读取这种类型的文件? 【参考方案1】:

AWS 胶水不支持 egg 文件。而是为您要使用的 python 库创建一个 zip 文件。正如 AWS Glue 所记录的:

除非库包含在单个 .py 文件中,否则应将其打包在 .zip 存档中

此外,AWS Glue 仅支持纯 Python 模块。请参阅 aws 文档中的以下引用

您可以在 AWS Glue 中使用 Python 扩展模块和库 ETL 脚本,只要它们是用纯 Python 编写的。 C 库 例如 pandas 目前不支持,也不支持 用其他语言编写的扩展。

参考:Using python libraries with AWS Glue

【讨论】:

以上是关于每次我从 Python 库路径调用 .egg 时,AWS Glue 作业都会崩溃的主要内容,如果未能解决你的问题,请参考以下文章

从文件而不是鸡蛋运行 Python 包

Python 如何跟踪安装了 egg 的模块?

如何包含子目录(相对位置)中的 python .egg 库?

将 python 库/应用程序打包为 .egg 文件有啥好处?

python导入(MySQLdb)和apache python_egg_cache的问题

Python默认调用路径