如何在 Google App Engine 中运行自定义 python 脚本

2024-03-08

对于这么长的详细问题表示歉意。开始...

该文件的名称为 send_daily_report.py 并使用一些库,这些库在requirements.txt 文件中详细介绍。

My app.yaml看起来如下:

runtime: python27
threadsafe: false

handlers:
- url: /send_daily_report
  script: send_daily_report.py

libraries:
- name: ssl
  version: latest

My cron.yaml看起来如下:

cron:
- description: "Send unsent subscriptions to Glocell rewards every 1 minute"
  url: /send_daily_report
  schedule: every 1 day from 00:00

最后我的要求.txt有以下内容:

Babel==2.5.3
cachetools==3.1.0
certifi==2017.11.5
chardet==3.0.4
coloredlogs==8.0
colorlog==3.1.0
et-xmlfile==1.0.1
google-api-core==1.10.0
google-auth==1.6.3
google-cloud-core==0.29.1
google-cloud-storage==1.15.0
google-resumable-media==0.3.2
googleapis-common-protos==1.5.10
humanfriendly==4.6
idna==2.6
jdcal==1.3
money==1.3.0
mysql-connector-python==8.0.5
mysqlclient==1.3.12
numpy==1.16.3
openpyxl==2.5.0
pandas==0.24.2
protobuf==3.7.1
pyasn1==0.4.5
pyasn1-modules==0.2.5
python-dateutil==2.8.0
python-magic==0.4.15
pytz==2017.3
requests==2.18.4
rsa==4.0
six==1.12.0
urllib3==1.22

当我做一个:

gcloud 应用部署 app.yaml cron.yaml

它似乎忽略了我的requirements.txt并且不安装依赖项。我什至在 gcloud 开发服务器中运行了它(dev_appserver.py https://cloud.google.com/appengine/docs/standard/python/tools/using-local-server./app.yaml --enable_console) 在本地,当我使用开发服务器控制台尝试导入库时,这些库肯定没有安装。

然后我尝试使用Python 3.7。它实际上将库安装在requirements.txt中,但问题出在处理程序中的app.yaml中,我无法指定脚本名称。对于 python 3.7,该值始终设置为 auto,按照gcloud app.yaml 参考 https://cloud.google.com/appengine/docs/standard/python3/config/appref.

我需要做什么才能在 gcloud app engine cron 中执行我的脚本。在 Linux 系统上,这将是 crontab 中的简单 cronjob 设置,如下所示:

0 0 * * * python /send_daily_py

从我读到的有关 Python 3.7 的内容来看,我似乎需要 django 或 flex 来处理请求并路由它们来执行我的自定义 .py 脚本,这似乎有点矫枉过正,这样我就可以执行一个脚本。当然有办法解决这个问题吗?我什至尝试将这些库包含在我的应用程序文件夹中的子文件夹中,如下所示:

pip install --upgrade -r requests.txt -t ./lib

然后我添加了init.py 在 lib 中,然后我更改了所有导入以使用

导入 lib.name_of_library

这不起作用,因为这些库随后无法导入它们需要的子包。

**

嘿嘿!

**


App Engine 是 PaaS 产品,而不是 IaaS 产品(实际上,您可以在其上运行 Linux 映像并安装您提到的 cron)。不能任意运行独立的游戏中的Python脚本。你might能够通过重新编写脚本来满足 GAE 应用程序的要求来实现您想要的目标 - 基本上使功能可以从 HTTP(S) 处理程序内部调用。

对于第一代标准环境(python27运行时):

  • the requirements.txtGAE 不使用该文件。正如您所发现的,您可以在 python 依赖项中使用它来供应商,但还有更多要做的事情,请参阅复制第三方库 https://cloud.google.com/appengine/docs/standard/python/tools/using-libraries-python-27#copying_a_third-party_library.
  • 您的脚本功能需要重新设计为 WSGI 应用程序,这是您在app.yaml. From 处理程序元素 https://cloud.google.com/appengine/docs/standard/python/config/appref#handlers_element:

A script:指令必须是 python 导入路径,例如,包.模块.应用程序指向 WSGI 应用程序。 a 的最后一个组成部分script:指令使用Python模块路径是 模块中全局变量的名称:该变量必须是 WSGI 应用程序,通常按照惯例称为 ** **。

注意:就像 Python 一样import语句,每个子目录 即一个包必须包含一个名为init.py https://docs.python.org/2/tutorial/modules.html#packages.

  • 我建议你通过Python运行环境 https://cloud.google.com/appengine/docs/standard/python/runtime,你的一长串要求might不满足沙箱限制(特别是纯Python https://cloud.google.com/appengine/docs/standard/python/runtime#Python_Pure_Python one).

对于第二代标准环境(python37运行时):

  • 依赖项会自动从您的安装requirements.txt文件,参见指定依赖关系 https://cloud.google.com/appengine/docs/standard/python3/specifying-dependencies
  • only auto可以指定在script:中的声明app.yaml,因为应用程序本身是通过entrypoint:配置。因此,您需要重新编写脚本,以便在该应用程序中作为处理程序进行调用。从运行时和应用程序元素 https://cloud.google.com/appengine/docs/standard/python3/config/appref#runtime_and_app_elements:

为了让您的应用程序接收 HTTP 请求,入口点应包含一个 启动一个监听指定端口的 Web 服务器的命令 通过 PORT 环境变量。

The 灵活的环境 https://cloud.google.com/appengine/docs/flexible/python/(与第二代标准的类似的返工)可能更适合,特别是因为您可以配置具有更多 ram/cpu 资源的实例(您可以使用这些资源)might需要根据你的判断requirements.txt文件)比在标准环境中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Google App Engine 中运行自定义 python 脚本 的相关文章

随机推荐

  • Python 的 3D 场景渲染器 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个易于使用的 Python 3D 场景渲染器 我所寻找的只是能够 加载3D场景模型 使用正
  • 无法在azure devops中构建asp.net应用程序

    能够在本地构建应用程序 但是当我尝试在 azure Devops 管道中构建时 它显示以下错误 我已经安装了实体框架并在 Web 配置文件中添加了 system data entity design 程序集 不走运 请在此处查找管道 htt
  • Bash 确认不会等待用户输入

    我正在尝试使用 bash 脚本实现确认提示 但由于某种原因 提示不会等待用户输入 我尝试过很多例子 但到目前为止还没有运气 如果有什么区别的话我用的是MacOS 只是我尝试过的几个例子 所有复制 粘贴来自SO中的其他答案 bin bash
  • [Int] 之和导致溢出

    我有一个返回的函数 Int 我想计算列表的总和 然而 虽然每个单独的元素都小于maxBound Int 总和肯定更大 一个 人为的 例子 ghci gt sum 1 10000000 Int 2004260032 有没有办法强制 sum 累
  • 使用 Mono Touch 时,我还可以打包为标准 Window 应用程序吗?

    我知道 Mono Touch 可以使用几乎一份源代码进行开发并部署到 Android iO 和 Windows Mobile 当然会有 3 个项目和一些与平台相关的代码 但我会有重要的 C 通用代码 但我还需要我的开发能够在标准 Windo
  • Ruby 是脚本语言还是解释语言?

    我刚刚注意到在Ruby的维基百科页面中 这种语言被定义为解释性语言 我明白我的背景中可能缺少一些东西 我一直都知道不需要编译器的解释型语言和编译型语言 需要在程序执行之前进行编译 之间的区别 但是脚本语言有什么特点呢 Ruby 可以定义为脚
  • webrtc如何选择输入视频设备?

    我正在研究webRTC应用程序 我参考的是这个软件 apprtc https code google com p webrtc source browse trunk samples js apprtc https code google
  • 编程中“let”变量的语言含义[重复]

    这个问题在这里已经有答案了 所以 我是一名 javascript 程序员 新版本的JavaScript ES6 http www ecma international org ecma 262 6 0 index html有一个用于声明变量
  • OpenCV = 运算符

    我正在研究 OpenCV 但我有一个困惑 我经历过这个link http opencv willowgarage com documentation cpp core basic structures html cv mat operato
  • 矩阵问题Python

    例如 如果我有矩阵 x 1 7 U1 1 5 8 U1 2 5 5 U2 如何获取 x 中除最后一个数据之外的所有数据 然后我需要对这些元素求和 这就是我需要的 sum 1 7 1 5 8 2 5 5 Thanks EDIT2 I try
  • 如何在.net中调试测试

    我想调试我的测试 检查每个测试 看看到底哪里失败了 我正在使用 coderush 这是一个很棒的工具 但我的 1 个月试用期已过期 欢迎任何建议 正如马克所说 如果你发现一个工具确实有用 就购买它 我个人使用 ReSharper 来运行我的
  • 在子查询中聚合按位或

    给出下表 CREATE TABLE BitValues n int 是否可以计算按位或n对于子查询中的所有行 例如 如果 BitValues 包含以下 4 行 n 1 2 4 3 我希望子查询返回 7 有没有办法在不创建 UDF 的情况下内
  • 实体框架+验证注解

    我想使用验证注释 我已经有一个由实体框架实现的模型 我需要数据验证 并且我知道有一个非常好的数据注释 但我真的不知道如何正确使用它与实体框架 我应该编辑实体吗 或者我应该写单独的课程 或者我应该编写从实体继承的类 你能告诉我应该使用的最佳方
  • 通过 HttpClient 对 HTTP Post 的非字符串属性进行 UrlEncode

    这段代码是Python中的 dataParams urllib urlencode name myname id 2 dataReq urllib2 Request mylink dataParams dataRes urllib2 url
  • 在 C 中使用嵌套循环打印星号('*')菱形?

    我希望当用户输入 5 作为钻石时能够打印这样的钻石 但也适用于任何奇数且大于 0 的值 我有一个代码 可以为用户输入 5 创建一个菱形 但不适用于所有奇数输入 half size 2 1 for a 1 a lt half a top to
  • 如何在 JavaScript 中执行 JSTL 的 c:url 的等效操作?

    我有一些 JavaScript 对相对 url 进行 Ajax 调用 使用 jQuery var servletUrl someservlet ajax type POST url servletUrl success function r
  • 如何使用 Twitter4j 检索超过 100 个结果

    我正在使用 Twitter4j 库来检索推文 但我得到的信息还不足以满足我的目的 目前 我从一页最多获取 100 个 如何在处理中的以下代码中实现 maxId 和sinceId 以便从 Twitter 搜索 API 检索超过 100 个结果
  • 使全局站点包中的一些模块在 virtualenv 中可用

    我想使用 virtualenv 的默认值 无站点包 但有些模块很难安装在 virtualenv 中 例如 gtk 我所说的 困难 是指您需要安装大量的 c 头文件并且需要编译大量的内容 我知道我可以通过不使用 pip 安装这些包来解决这个问
  • Windows Phone 7 的水印文本框?

    我正在寻找某种适用于 Windows Phone 7 的 WatermarkedTextBox 但我需要一个自定义控件 而不是如何实现水印行为或如何处理 GotFocus LostFocus 事件 官方已添加此内容Windows Phone
  • 如何在 Google App Engine 中运行自定义 python 脚本

    对于这么长的详细问题表示歉意 开始 该文件的名称为 send daily report py 并使用一些库 这些库在requirements txt 文件中详细介绍 My app yaml看起来如下 runtime python27 thr