Python 在AWS lambda中组织外部依赖关系
我对python比较陌生,甚至对Lambda比较新。我创建了一个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/
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