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

如何在AWS Glue脚本中正确导入Python模块?相关疑问求解

问题解答

先明确你的mymath2.zip的实际结构:

mymath2.zip
├─ mymath2.py
└─ Connection/
   └─ connection.py

针对你的四个疑问逐一解释:

1. 为何import mymath2能生效?

AWS Glue会将你指定的S3 zip包的根目录添加到Python的sys.path中,根目录下的mymath2.py属于顶级模块,符合Python的模块导入规则,因此直接import mymath2可以正常识别。

2. 为何import mymath2.Connection无法工作?

你误解了模块结构:mymath2是单个.py文件(不是包目录),而Connection是和它同级的独立目录,并非mymath2的子包。另外,Connection目录缺少__init__.py文件——这是Python识别目录为合法包的必要条件,即使它是顶级目录,没有这个文件也无法被当作包导入。

3. 为何from mymath2.Connection import connection无法工作?

原因和上面一致:

  • Connection不是mymath2模块的子目录,你的导入路径完全不符合实际文件结构;
  • Connection目录没有__init__.py,不满足Python包的要求,无法被导入。

4. 为何from mymath2 import mymath2无法工作?

mymath2是模块名(对应mymath2.py),这条语句的意思是从mymath2模块中导入名为mymath2的成员(比如类、函数、变量),但你的mymath2.py里大概率没有定义这个名称的成员。如果只是想导入整个模块,直接import mymath2即可;如果要导入模块内的特定成员,需要明确写成员名,比如from mymath2 import calculate_sum。


修复方案

方案1:将mymath2改为包含子包的结构

如果想让mymath2作为根包,包含Connection子包,调整zip结构为:

mymath2.zip
└─ mymath2/
   ├─ __init__.py  # 空文件即可
   ├─ core.py  # 原mymath2.py的内容移到这里,或者直接写入__init__.py
   └─ Connection/
      ├─ __init__.py  # 空文件即可
      └─ connection.py

调整后即可正常使用以下导入语句:

  • import mymath2
  • import mymath2.Connection
  • from mymath2.Connection import connection

方案2:单独修复Connection目录的导入问题

如果不想调整整体结构,给Connection目录添加空的__init__.py文件,zip结构变为:

mymath2.zip
├─ mymath2.py
└─ Connection/
   ├─ __init__.py
   └─ connection.py

此时可以直接导入Connection包:

from Connection import connection
# 或者
import Connection.connection

注意:确保zip包上传到S3后,Glue作业的「Python library path」已正确指定该zip的S3路径,且作业角色拥有访问该S3资源的权限。

内容的提问来源于stack exchange,提问作者Abhijeet Kelkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:12:50