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

使用Serverless Framework部署Python ML模型时自定义模块导入失败排查

解决Serverless Framework部署时"my_submodule not found"的问题

我之前部署Python Serverless服务时也踩过类似的模块导入坑,结合你的仓库结构来看,这个问题基本集中在Python模块导入规则或者Serverless打包配置上,给你几个具体的排查和解决方向:

1. 先确认导入语句的正确性

在handler.py里导入子模块时,一定要使用完整的包路径,比如:

# 正确的绝对导入
from mysubpackage.my_submodule import your_function_or_class

# 或者相对导入(handler和mysubpackage同目录时可用)
from .mysubpackage.my_submodule import your_function_or_class

如果直接写import my_submodule,Python会在当前目录找这个文件,而不是mysubpackage子目录里的,肯定会报错。

2. 检查Serverless打包配置是否包含子包

Serverless Framework默认会打包handler所在目录的文件,但如果你的serverless.yml或引用的myfun.yml里有自定义的package配置,可能不小心把mysubpackage排除了。

打开这两个yaml文件,检查package字段:

  • 如果有exclude规则,确保没有把mysubpackage/**加入排除列表;
  • 如果用include规则,一定要明确包含子包,比如:
    package:
      include:
        - handler.py
        - mysubpackage/**  # 包含子包下所有文件
        - requirements.txt
    

另外,如果你用了serverless-python-requirements插件,这个插件默认会处理PyPI依赖,但本地子包需要确保在打包范围内,上面的include配置也能覆盖这种情况。

3. 本地验证先排除环境问题

先在本地模拟运行,确认不是代码本身的问题:

  • 直接运行python handler.py(如果handler里有测试代码的话);
  • 或者用Serverless本地调用命令:serverless invoke local -f your-function-name(替换成你的函数名)。
    如果本地也报错,那就是导入路径的问题,和Serverless部署无关;如果本地正常,那肯定是打包时的配置问题。

4. 确保子包有__init__.py文件

Python要求每个包目录下必须有__init__.py文件(可以是空文件),才能被识别为可导入的包。去mysubpackage目录里看看,如果没有这个文件,新建一个空的__init__.py试试,很多时候这个小细节容易被忽略。

按照上面的步骤排查,应该能解决模块找不到的问题。

内容的提问来源于stack exchange,提问作者3nomis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:52:06