从名称中带点的文件夹导入 - Python
import from a folder with dots in name - Python
我有一个 python 包,如下所示:
package/
├── __init__.py
├── PyMySQL-0.7.6-py2.7.egg
├── pymysql
├── PyMySQL-0.7.x.pth
└── tests.py
无法更改文件夹结构,因为它来自第三方库。
.pth 文件的内容是
import sys; sys.__plen = len(sys.path)
./PyMySQL-0.7.6-py2.7.egg
import 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)
将 pymysql 包含在 tests.py
中的最佳方法是什么
我显然不能使用from PyMySQL-0.7.6-py2.7.egg
,因为文件夹名称包含点。
P.S。绝对路径未知,因为此代码应该部署到 AWS lambda
问题是模块的 .pth 文件没有被使用。 Amazon 的 Lambda 构建说明要求您将依赖项安装到与 Lambda 函数文件相同的根目录中。此目录未配置为 "site directory"(例如 virtualenv 中的 lib/pythonX.Y/site-packages/
,或者对于全局安装,/usr/lib/pythonX.Y/site-packages
(CentOS) 或 /usr/local/lib/pythonX.Y/dist-packages
(Ubuntu) ),所以 .pth 文件不会被评估。
您可以将当前工作目录配置为站点目录。 The site module documentation 将创建 usercustomize.py
描述为添加自定义站点目录的约定,但 Lambda 提出了另一个小问题:要自动评估,文件应在 ~/.local/lib/pythonX.Y/site-packages
中找到。我在 Lambda .zip 文件的根目录中创建了一个 usercustomize.py
,并首先将其导入到我的 Lambda 函数处理程序文件中。然后我能够导入使用 .pth 文件配置点符号的模块。
usercustomize.py
import site
import os
site.addsitedir(os.getcwd())
lambda_handler.py
import usercustomize
from foo.bar import baz
使用此方法,您可以将依赖项安装到分发 zip 文件根目录中的 site-packages
目录中(os.getcwd()
变为 os.path.join(os.getcwd(), 'site-packages')
),使结构更简洁,如果这对您很重要。
我有一个 python 包,如下所示:
package/
├── __init__.py
├── PyMySQL-0.7.6-py2.7.egg
├── pymysql
├── PyMySQL-0.7.x.pth
└── tests.py
无法更改文件夹结构,因为它来自第三方库。
.pth 文件的内容是
import sys; sys.__plen = len(sys.path)
./PyMySQL-0.7.6-py2.7.egg
import 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)
将 pymysql 包含在 tests.py
中的最佳方法是什么我显然不能使用from PyMySQL-0.7.6-py2.7.egg
,因为文件夹名称包含点。
P.S。绝对路径未知,因为此代码应该部署到 AWS lambda
问题是模块的 .pth 文件没有被使用。 Amazon 的 Lambda 构建说明要求您将依赖项安装到与 Lambda 函数文件相同的根目录中。此目录未配置为 "site directory"(例如 virtualenv 中的 lib/pythonX.Y/site-packages/
,或者对于全局安装,/usr/lib/pythonX.Y/site-packages
(CentOS) 或 /usr/local/lib/pythonX.Y/dist-packages
(Ubuntu) ),所以 .pth 文件不会被评估。
您可以将当前工作目录配置为站点目录。 The site module documentation 将创建 usercustomize.py
描述为添加自定义站点目录的约定,但 Lambda 提出了另一个小问题:要自动评估,文件应在 ~/.local/lib/pythonX.Y/site-packages
中找到。我在 Lambda .zip 文件的根目录中创建了一个 usercustomize.py
,并首先将其导入到我的 Lambda 函数处理程序文件中。然后我能够导入使用 .pth 文件配置点符号的模块。
usercustomize.py
import site
import os
site.addsitedir(os.getcwd())
lambda_handler.py
import usercustomize
from foo.bar import baz
使用此方法,您可以将依赖项安装到分发 zip 文件根目录中的 site-packages
目录中(os.getcwd()
变为 os.path.join(os.getcwd(), 'site-packages')
),使结构更简洁,如果这对您很重要。