vin*_*nha 4 python python-2.7 pymysql aws-lambda
我有一个 python 包,如下所示:
\n\npackage/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 PyMySQL-0.7.6-py2.7.egg\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pymysql\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 PyMySQL-0.7.x.pth \n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tests.py\nRun Code Online (Sandbox Code Playgroud)\n\n文件夹结构无法更改,因为它来自第三方库。
\n\n.pth 文件的内容是
\n\nimport sys; sys.__plen = len(sys.path)\n./PyMySQL-0.7.6-py2.7.egg\nimport sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)\nRun Code Online (Sandbox Code Playgroud)\n\n将pymysql包含在tests.py中的最佳方法是什么
\n\n我显然无法使用,from PyMySQL-0.7.6-py2.7.egg因为文件夹名称包含点。
PS 绝对路径未知,因为此代码应该部署到 AWS lambda
\n小智 5
问题是模块的 .pth 文件没有被使用。Amazon 的 Lambda 构建说明要求您将依赖项安装到与 Lambda 函数文件相同的根目录中。该目录未配置为“站点目录”(例如,lib/pythonX.Y/site-packages/在 virtualenv 中,或对于全局安装/usr/lib/pythonX.Y/site-packages(CentOS)或/usr/local/lib/pythonX.Y/dist-packages(Ubuntu)),因此不评估 .pth 文件。
您可以将当前工作目录配置为站点目录。 站点模块文档描述了创建 ausercustomize.py作为添加自定义站点目录的约定,但 Lambda 提出了另一个问题:要自动评估,该文件预计会在~/.local/lib/pythonX.Y/site-packages. 我usercustomize.py在 Lambda .zip 文件的根目录中创建了一个 ,并首先将其导入到我的 Lambda 函数处理程序文件中。然后,我能够导入使用 .pth 文件来配置点表示法的模块。
用户定制.py
import site
import os
site.addsitedir(os.getcwd())
Run Code Online (Sandbox Code Playgroud)
lambda_handler.py
import usercustomize
from foo.bar import baz
Run Code Online (Sandbox Code Playgroud)
使用此方法,您可以将依赖项安装到site-packages分发 zip 文件根目录中的目录中(os.getcwd()成为os.path.join(os.getcwd(), 'site-packages')),使结构更加清晰(如果这对您来说很重要)。
| 归档时间: |
|
| 查看次数: |
4851 次 |
| 最近记录: |