gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:52:03 26 4
gpt4 key购买 nike

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

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

我的 app.yaml 如下所示:

runtime: python27
threadsafe: false

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

libraries:
- name: ssl
version: latest

我的 cron.yaml 如下所示:

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

最后我的requirements.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 deploy app.yaml cron.yaml

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

然后我尝试使用 Python 3.7。它实际上将库安装在requirements.txt中,但问题出在处理程序中的app.yaml中,我无法指定脚本名称。对于 python 3.7,该值始终设置为 auto,如 gcloud app.yaml reference

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

0 0 * * * python /send_daily_py

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

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

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

import lib.name_of_library

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

**

Heeeehelp!

**

最佳答案

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

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

  • GAE 不使用 requirements.txt 文件。正如您所发现的,您可以在 python 依赖项中使用它来供应商,但还有更多工作要做,请参阅 Copying a third-party library .
  • 您的脚本功能需要重新设计为 WSGI 应用程序,这是您在 app.yaml 中配置的内容。来自 Handlers element :

A script: directive must be a python import path, for example, package.module.app that points to a WSGI application. The last component of a script: directive using a Python module path is the name of a global variable in the module: that variable must be a WSGI app, and is usually called ** ** by convention.

Note: just like for a Python import statement, each subdirectory that is a package must contain a file named init.py.

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

  • 依赖项会自动从您的 requirements.txt 文件安装,请参阅 Specifying Dependencies
  • 只能在 app.yamlscript: 语句中指定 auto,因为应用本身是通过 指定的入口 pip : 配置。因此,您需要重新编写脚本,以便在该应用程序中作为处理程序进行调用。来自 Runtime and app elements :

For your app to receive HTTP requests, entrypoint should contain a command which starts a web server that listens on the port specified by the PORT environment variable.

flexible environment (与第二代标准的类似重新工作)可能更适合,特别是因为您可以配置具有更多 ram/cpu 资源的实例(您可能需要根据您的 来判断) requirements.txt 文件)比标准环境中的要高。

关于python - 如何在 Google App Engine 中运行自定义 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56159100/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com