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

如何用Setuptools生成Python根级别handlers包?

解决Python包生成问题:让handlers作为根级包

看起来你现在的问题是打包后subfolder1和subfolder2变成了独立的顶级包,而不是属于handlers的子包。这主要是因为setuptools没正确识别到handlers作为根包的位置,咱们一步步来调整:

1. 确认项目结构与__init__.py文件

首先确保你的目录结构里,每个需要被识别为包的目录都有__init__.py(空文件就行),结构应该是这样:

src/
  controller/
    handlers/
      __init__.py
      subfolder1/
        __init__.py
        file1.py
      subfolder2/
        __init__.py
        file2.py
setup.py

如果handlers目录下没有__init__.py,setuptools不会把它当作一个包,只会把下面的subfolder1/subfolder2当作独立包,这是关键!

2. 修改setup.py配置

你的原setup.py用了find_packages()但没指定查找路径,导致它从当前目录(setup.py所在目录)开始找,找不到handlers这个包,反而找到了src/controller/handlers下的subfolder1/subfolder2。咱们调整两个参数:

  • package_dir:告诉setuptools,顶级包的根目录在哪里
  • find_packages(where="..."):指定从哪个目录开始查找包

修改后的setup.py代码:

from setuptools import setup, find_packages

setup(
    name="handlers",
    version="1.0",
    description="AWS Lambda handlers package",
    # 表示顶级包(比如handlers)在src/controller目录下
    package_dir={"": "src/controller"},
    # 从src/controller目录开始查找所有包
    packages=find_packages(where="src/controller"),
    install_requires=[
        'structlog==19.2.0',
        'python-json-logger==0.1.10'
    ],
    include_package_data=True,
    zip_safe=False
)

如果你不想用find_packages,也可以直接指定所有包(包括子包):

packages=["handlers", "handlers.subfolder1", "handlers.subfolder2"],
package_dir={"": "src/controller"},

3. 测试打包与安装

先卸载之前可能安装过的旧版本(避免缓存干扰):

pip uninstall -y handlers

然后用开发模式安装(方便调试):

pip install -e .

安装完成后,你可以在Python环境里测试导入:

from handlers.subfolder1 import file1
from handlers.subfolder2 import file2

如果能成功导入,说明包结构已经正确了。

4. 配置AWS SAM Toolkit

在PyCharm的SAM模板(template.yaml)里,Handler路径要对应新的包结构,格式是handlers.子包名.文件名.函数名,比如:

Resources:
  YourLambdaFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: src/controller/
      Handler: handlers.subfolder1.file1.lambda_handler  # 这里要对应你的函数名
      Runtime: python3.9  # 换成你用的Python版本

这样SAM本地部署时,就能正确找到handlers包下的子模块了。

内容的提问来源于stack exchange,提问作者amrit chhetri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 07:13:12