Python 在AWS lambda中组织外部依赖关系

Python 在AWS lambda中组织外部依赖关系,python,amazon-web-services,aws-lambda,Python,Amazon Web Services,Aws Lambda,我对python比较陌生,甚至对Lambda比较新。我创建了一个lambda函数,它需要一些外部依赖项(elasticsearch和elasticsearch-curator) 我的根文件夹名为index\u-curator,其中有一个python文件main.py。我通过pip按照Amazon的示例安装了依赖项 现在这个根目录和许多子目录中还有许多其他文件,这并不奇怪,因为这些依赖关系非常大。对于查看此包的其他人来说,很难区分我编写的文件和外部依赖项。例如: index_curator/

我对python比较陌生,甚至对Lambda比较新。我创建了一个lambda函数,它需要一些外部依赖项(
elasticsearch
elasticsearch-curator

我的根文件夹名为
index\u-curator
,其中有一个python文件
main.py
。我通过
pip
按照Amazon的示例安装了依赖项

现在这个根目录和许多子目录中还有许多其他文件,这并不奇怪,因为这些依赖关系非常大。对于查看此包的其他人来说,很难区分我编写的文件和外部依赖项。例如:

index_curator/
    dateutil/
    click/
    idna/
    main.py    <-- the only file I wrote
    README
    LICENSE
    six.py
    ...

任何提示都将不胜感激。

从代码中分离外部依赖项绝对是最佳实践。在python中可以通过多种方式实现这一点

默认情况下,python在指定的位置搜索模块。要指定其他位置(即
外部
依赖项文件夹),必须将此新位置添加到python路径。您可以在
main.py
中执行此操作,如下所示:

import sys, os
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), 'external')))
然后,您将能够像往常一样导入所有依赖项,因为解释器将在运行时检查附加文件夹:

from elasticsearch import Elasticsearch, RequestsHttpConnection
import curator
有关更多详细信息,请查看答案

因为您的代码将是一个lambda函数,所以您将始终有一个处理程序。但对于更一般的情况,或者如果您开始编写多个文件,并且还需要管理这些文件中的外部依赖项,则可以选择维护一个
context.py
文件,该文件设置依赖项路径和所有导入,如下所示:

import sys, os
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), 'external')))
import elasticsearch
import context
然后在您的文件中,您可以通过以下方式调用它们:

from context.elasticsearch import Elasticsearch, RequestsHttpConnection
import context.curator
from elasticsearch import Elasticsearch, RequestsHttpConnection
import curator
import sys, os
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), 'external')))
import elasticsearch
import context
from context.elasticsearch import Elasticsearch, RequestsHttpConnection
import context.curator