有没有办法在使用 aws sam 时修复 pythonpath?

问题描述

我正在尝试导入我创建的自定义模块,但仅仅为了导入它就破坏了我的 API。

数据目录:

-src
--order
----__init__.py
----app.py
----validator.py
----requirments.txt
--__init__.py

在我的 app.py 上,我有这个代码

import json
from .validator import validate

def handler(event,context):
    msg = ''
    if event['httpMethod'] == 'GET':
        msg = "GET"
    elif event['httpMethod'] == 'POST':
        pass    #msg = validate(json.loads(event['body']))

    return {
        "statusCode": 200,"body": json.dumps({
            "message": msg,}),}

我收到此错误

无法导入模块“app”:在没有已知父包的情况下尝试相对导入

但是,如果我从我的代码删除第 2 行 (from .validator import validate),它工作正常,所以问题在于 import,老实说,我无法弄清楚发生了什么。我尝试使用以下方法导入:

from src.order.validator import validate

但它也不起作用。

解决方法

能够通过以下命令生成构建来解决我的问题:sam build,然后压缩我的文件,并将其放在 aws-sam 内的根文件夹中,这不是一个很好的解决方案,因为我必须在每个小的时候重建改变,但至少现在是一种解决方法

,

似乎 app.py 尚未作为包层次结构的一部分加载(即 srcorder 包尚未加载)。你应该可以运行

from src.order import app

来自 src 的父目录,您的代码将起作用。如果您从终端运行 python app.py - 我认为这就是您所做的 - app.py 将作为独立脚本运行 - 而不是作为包的一部分。

但是,我认为您的情况不需要 .validator,因为两个模块都在同一目录中。你应该可以做到

from validator import validate

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...