我对python相对较新,而对Lambda则较新。我创建了一个lambda函数,该函数需要一些外部依赖项(elasticsearch
和elasticsearch-curator
)。
我的根文件夹称为index_curator
,其中有一个单独的python文件main.py
。我按照亚马逊instructions的规定通过pip
安装了依赖项,例如
pip install elasticsearch elasticsearch-curator -t /path/to/index_curator
此根目录和许多子目录中现在有许多其他文件,这并不奇怪,因为这些依赖性很大。对于其他使用此程序包的人来说,很难区分我编写的文件和外部依赖项。例如:
index_curator/
dateutil/
click/
idna/
main.py <-- the only file I wrote
README
LICENSE
six.py
...
有没有办法将所有这些外部依赖项转移到一个子文件夹中,例如
index_curator/
/external/
dateutil/
click/
idna/
README
LICENSE
six.py
main.py <-- the only file I wrote
为完整起见,main.py
中的导入为:
from elasticsearch import Elasticsearch, RequestsHttpConnection
import curator
任何指针将不胜感激。
答案 0 :(得分:0)
从代码中分离外部依赖绝对是最佳实践。您可以通过多种方式在python中实现此目标。
默认情况下,python在指定的here位置搜索模块。要指定其他位置(即您的external
依赖文件夹),必须将此新位置添加到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
有关更多详细信息,请查看答案here
由于您的代码将是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