从名称中带有点的文件夹导入 - Python

vin*_*nha 4 python python-2.7 pymysql aws-lambda

我有一个 python 包,如下所示:

\n\n
package/\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\n
Run Code Online (Sandbox Code Playgroud)\n\n

文件夹结构无法更改,因为它来自第三方库。

\n\n

.pth 文件的内容是

\n\n
import 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)\n
Run Code Online (Sandbox Code Playgroud)\n\n

将pymysql包含在tests.py中的最佳方法是什么

\n\n

我显然无法使用,from PyMySQL-0.7.6-py2.7.egg因为文件夹名称包含点。

\n\n

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')),使结构更加清晰(如果这对您来说很重要)。