在谷歌云平台部署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”错误