在谷歌云平台部署python脚本

Posted

技术标签:

【中文标题】在谷歌云平台部署python脚本【英文标题】:Deploy python script on google cloud platform 【发布时间】:2017-07-21 17:44:30 【问题描述】:

我正在研究如何在谷歌云平台上部署我的脚本。 我已经创建了一个目录或文件夹,其中包含 script.py/lib 文件夹中的所有库。

我没有得到的是设置我的app.yaml 以运行script.py(python 2.7)并在需要时访问lib

我也不知道是否需要制作requirments.txt,因为我使用的是第三方库。

这是我在script.py中的所有导入

import requests
import re
import mysql.connector
from urlparse import urlparse
from urlparse import urljoin
from bs4 import BeautifulSoup

另外,我的lib 中有 BeautifulSoup、requests 和 mysql.connector。 我不知道其他我认为它们是内置的 python2.7,因为我无法使用 pip 安装它们。

顺便说一下,我使用的是 Windows 10。

app.yaml

runtime: python27
api_version: 1
threadsafe: true



handlers:
- url: /lib/requests
  script: Scrape.app

handlers:
- url: /requests
  script: Scrape.app

handlers:
- url: /mysql/connector
  script: Scrape.app

handlers:
- url: /bs4/
  script: Scrape.app

cron.yaml

cron:
- description: "Scrape"
  url: /
  schedule: every 10 mins
  retry_parameters:
    min_backoff_seconds: 2.5
    max_doublings: 10

我遇到了类似的错误

Updating service [default]...failed.                                                                                                                                                                                                          
ERROR: (gcloud.app.deploy) Error Response: [9] 
Application startup error:
/bin/sh: 1: Python: not found

Traceback (most recent call last):
 File  "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 240, in Handle
handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
handler, path, err = LoadObject(self._handler)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 85, in LoadObject
obj = __import__(path[0])
  File "/base/data/home/apps/s~tribal-bonito-157700/20170302t182530.399552845921654287/Scrape.py", line 3, in <module>
import requests
ImportError: No module named requests

【问题讨论】:

【参考方案1】:

来自Handlers element 表中的脚本行:

script: 指令必须是 python 导入路径,例如, package.module.app 指向一个 WSGI 应用程序。使用 Python 模块 路径的 script: 指令的最后一个组件是 模块中全局变量的名称:该变量必须是 WSGI 应用程序,通常按约定称为 app

注意:就像 Python import 语句一样,每个子目录 即一个包必须包含一个名为__init__.py的文件

我建议您花一些时间查看来自Quickstart for Python App Engine Standard Environment 的代码 sn-ps,您将在其中看到一个简单应用程序的基本结构。

requirements.txt 文件可用于指定要安装在lib 目录中的软件包列表,如下所示:

pip install -r requirements.txt -t lib

但这不是绝对必要的,也可以直接在pip cmdline 上明确指定包。

【讨论】:

我可以在app.yaml中设置何时运行代码吗?例如每 24 小时应用程序 enging 将运行代码。 天哪,这是我偶然发现的另一个术语cron.yaml。有什么想法可以添加X-Appengine-Cron: true 还是我做错了? 花一些时间在文档站点上,您需要先了解自己的方位。查看左侧导航栏,您将找到有关操作指南、概念、教程、参考等方面的文章。对于 cron,请以 cloud.google.com/appengine/docs/standard/python/config/cron 开头

以上是关于在谷歌云平台部署python脚本的主要内容,如果未能解决你的问题,请参考以下文章

试图在谷歌云中查找已部署 python 函数的当前项目 ID 会出错

将 node.js 应用程序部署到谷歌云平台时找不到模块“yargs”错误

在谷歌云中部署后,Angular 应用程序无法调用 Flask 服务器 API

如何在谷歌云构建中访问 git 标签?

如何在谷歌云中部署 Spring Boot 应用程序?

如何在谷歌云平台中使用私有 IP 从我的电脑连接到 sql 实例