Python 2.7 如何从google.cloud导入模块以在AWS Lambda中使用?
我正在尝试在AWS Lambda上运行一个脚本,在最后将数据发送到Google云存储(GCS)。当我在本地这样做时,它可以工作,但当我在AWS Lambda上运行脚本时,导入GCS客户端库失败(尽管其他导入工作正常)。有人知道为什么吗Python 2.7 如何从google.cloud导入模块以在AWS Lambda中使用?,python-2.7,amazon-web-services,google-cloud-storage,aws-lambda,Python 2.7,Amazon Web Services,Google Cloud Storage,Aws Lambda,我正在尝试在AWS Lambda上运行一个脚本,在最后将数据发送到Google云存储(GCS)。当我在本地这样做时,它可以工作,但当我在AWS Lambda上运行脚本时,导入GCS客户端库失败(尽管其他导入工作正常)。有人知道为什么吗 以下是脚本导入的摘录: # main_script.py import robobrowser from google.cloud import storage # ...generate data... # ...send data to storage.
以下是脚本导入的摘录:
# main_script.py
import robobrowser
from google.cloud import storage
# ...generate data...
# ...send data to storage...
来自AWS的错误消息:
无法导入模块“主脚本”:没有名为google.cloud的模块
为了确认问题出在google客户端库导入上,我在AWS Lambda中运行了这个脚本的一个版本,有GCS导入和没有GCS导入(注释掉后面对它的引用),当注释掉GCS客户端库导入时,脚本照常运行,没有导入相关错误。其他导入(robobrowser
)在本地和AWS上始终工作正常
我使用的是一个virtualenv,python设置为2.7.6。要部署到AWS Lambda,我将执行以下手动过程:
- 压缩虚拟环境的pip包:
cd~/.virtualenvs/{PROJECT_NAME}/lib/python2.7/站点包
zip-r9~/code/{PROJECT\u NAME}.zip*
- 压缩项目内容,将其添加到与上面相同的压缩:
zip-g~/code/{PROJECT\u NAME}.zip*
- 将zip上传到AWS并使用web控制台进行测试
~/.virtualenvs/{PROJECT\u NAME}/lib/python2.7/site packages
中运行树
的结果的子集:
...
│
├── google
│ ├── ...
│ ├── cloud
│ │ ├── _helpers.py
│ │ ├── _helpers.pyc
│ │ ├── ...
│ │ ├── bigquery
│ │ │ ├── __init__.py
│ │ │ ├── __init__.pyc
│ │ │ ├── _helpers.py
│ │ │ ├── _helpers.pyc
│ │ ├── ...
│ │ ├── storage
│ │ │ ├── __init__.py
│ │ │ ├── __init__.pyc
│ │ │ ├── _helpers.py
│ │ │ ├── _helpers.pyc
├── robobrowser
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── browser.py
│ ├── browser.pyc
│ ├── ...
...
解压并检查zip的内容,确认在压缩过程中此结构保持不变。我能够通过将
\uuu init\uuuuuuuuuuuupy
添加到google
和google/cloud
安装中的pip
目录中来解决此问题。尽管当前的googlecloud
package(0.24.0)表示支持python2.7,但使用pip
下载的包结构似乎给我带来了问题
为了报告所有内容,在完成此操作之后,我还遇到了一个单独的问题:AWS lambda无法将主脚本作为模块导入。我通过从头开始一步一步地重新创建回购协议来解决这个问题。我没能找出第二个问题的原因,但是嘿。计算机。非常感谢:)我一直在浪费两个小时来解决这个问题。谷歌云API文档和库太糟糕了。。。与AWS没有可比性。