很长的问题很抱歉。来...
该文件的名称为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.yaml cron.yaml
它似乎忽略了我的requirements.txt,并且未安装依赖项。我什至在本地gcloud开发服务器(dev_appserver.py ./app.yaml --enable_console)中运行它,当我使用开发服务器控制台尝试导入它们时,肯定没有安装这些库。
然后我尝试使用Python 3.7。这实际上将库安装在requirements.txt中,但是问题出在处理程序中的app.yaml中,我无法指定脚本名称。对于python 3.7,该值始终根据gcloud app.yaml reference设置为auto。
在gcloud应用引擎cron中执行我的脚本需要做什么。在Linux系统上,这将是crontab中的一个简单的cronjob设置,如下所示:
0 0 * * * python / send_daily_py
从我读到的有关Python 3.7的内容来看,似乎我需要django或flex处理请求并路由它们以执行我的自定义.py脚本,这似乎有点过头了,以便我可以执行一个脚本。当然可以解决这个问题吗?我什至尝试将库包含在我的应用文件夹中的子文件夹中,如下所示:
pip install --upgrade -r requirements.txt -t ./lib
然后我在lib中添加了 init .py,然后将所有导入更改为使用
导入lib.name_of_library
这不起作用,因为这些库随后无法导入所需的子包。
**
**
答案 0 :(得分:1)
App Engine是PaaS产品,而不是IaaS产品(实际上,您可以在其中运行Linux映像并安装您提到的cron)。您不能在GAE中运行任意独立 python脚本。通过重新编写脚本以满足GAE应用程序要求,您可能能够实现所需的功能-基本上可以从HTTP(S)处理程序内部调用该功能。
对于第一代标准环境(python27运行时):
requirements.txt
文件。正如您所发现的,您可以使用它来提供python依赖项的供应商,但还有更多工作要做,请参见Copying a third-party library。app.yaml
中配置的。来自Handlers element:脚本指令必须是python导入路径,例如, package.module.app 指向WSGI应用程序。使用 Python模块路径的 script:指令的最后一个组件是 模块中全局变量的名称:该变量必须是 WSGI应用,通常习惯上称为**。
注意:就像Python import 语句一样,每个子目录 该程序包必须包含名为init.py的文件。
对于第二代标准环境(python37运行时):
requirements.txt
文件中自动安装的,请参见Specifying Dependencies auto
的{{1}}语句中只能指定script:
,因为应用本身是通过app.yaml
配置指定的。因此,您需要重新编写脚本以在该应用中作为处理程序调用。来自Runtime and app elements:要让您的应用接收HTTP请求,入口点应包含一个 命令,该命令启动侦听指定端口的Web服务器 通过PORT环境变量。
flexible environment(与第二代标准类似的返工)可能更合适,尤其是因为您可以为实例配置更多的ram / cpu资源(可能会 与标准环境相比,em>需要根据您的entrypoint:
文件来判断。