【发布时间】:2018-09-25 04:00:20
【问题描述】:
我遇到了一个关于为 AWS Lambda 构建 Python 3 应用程序的 article on serverlesscode.com,它建议使用 pip(或 pip3)在 /vendored 子目录中安装依赖项。我喜欢这个想法,因为它可以保持文件结构整洁,但我在实现它时遇到了一些问题。
我正在使用无服务器框架,并且我的模块以正常方式导入到我的代码中,例如from pynamodb.models import Model
我已经使用命令pip install -t vendored/ -r requirements.txt 在子目录中安装了我的各种依赖项(每个 requirements.txt),这似乎按预期工作 - 我可以看到子目录中安装的所有模块。
但是,当调用该函数时,我收到错误 Unable to import module 'handler': No module named 'pynamodb'(其中 pynamodb 是已安装的模块之一)。
我可以通过将我的 pip 安装更改为项目根目录来解决此错误,即不在 /vendored 文件夹中 (pip install -t ./ -r requirements.txt)。这将安装完全相同的文件。
必须有一个我丢失的指向子文件夹的配置,但谷歌搜索没有透露我是否需要以不同的方式导入我的模块,或者是否有一些其他的全局配置我需要更改。
总结一下:如何使用 Pip 将我的依赖项安装在项目的子文件夹中?
编辑:注意到 tkwargs 关于使用 serverless 插件进行打包的好建议,了解如何在没有 venv 的情况下完成此操作仍然很好,因为例子。主要目的不是为了简化打包(使用 pip 非常简单),而是通过避免根目录中的其他文件夹来保持我的文件结构更清晰。
【问题讨论】:
-
如果您尝试安装到
vendored以便更轻松地打包您的 Lambda 函数,我建议您使用 serverless-python-requirements 插件。在这种情况下,您可以使用 virtualenv 在本地进行开发,当您部署时,插件会负责打包您的功能
标签: python pip aws-lambda serverless-framework python-packaging