我正在使用Python 3.7运行时设置一个新的Google App Engine。但是,即使设置非常少,它也会失败。
app.yaml很简单:
runtime: python37
main.py很简单:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello World!'
最后,requirements.txt就像这样简单:
Flask>=1.0.2
torch==1.0.1
Flask-Compress>=1.4.0
numpy>=1.16.2
我希望此设置在发布gcloud app deploy
时会起作用,但我收到一个错误-这是Google Cloud Build上错误日志的最后几行:
(log lines before this omitted as they're on INFO level)
Traceback (most recent call last):
File "/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/usr/local/bin/ftl.par/__main__.py", line 65, in <module>
File "/usr/local/bin/ftl.par/__main__.py", line 54, in main
File "/usr/local/bin/ftl.par/__main__/ftl/python/builder.py", line 114, in Build
File "/usr/local/bin/ftl.par/__main__/ftl/python/layer_builder.py", line 153, in BuildLayer
File "/usr/local/bin/ftl.par/__main__/ftl/common/single_layer_image.py", line 60, in GetCacheKey
File "/usr/local/bin/ftl.par/__main__/ftl/python/layer_builder.py", line 109, in GetCacheKeyRaw
File "/usr/local/bin/ftl.par/__main__/ftl/python/layer_builder.py", line 332, in GetCacheKeyRaw
File "/usr/local/bin/ftl.par/__main__/ftl/python/layer_builder.py", line 346, in _python_version
File "/usr/lib/python2.7/subprocess.py", line 394, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 938, in _execute_child
self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory
为什么会失败?在开始使用python 3.7时,在这里使用python 2.7是否正常?似乎找不到有关此特定错误的任何文档-我试图在app.yaml
文件中增加内存,但是没有任何运气。
答案 0 :(得分:-1)
您在main.py文件中缺少一小部分。在main.py文件的末尾添加以下行:
if __name__ == '__main__':
app.run(host='127.0.0.1', port=8080, debug=True)
更多信息可以在GoogleCloudPlatform > python-docs-samples GitHub hello_world示例中找到。
但是,问题是由requirements.txt文件中的库引起的。如果您注释掉# torch==1.0.1
并重新部署,您将看到部署将成功。
Torch是一个庞大的库,其重量约为 582.5MB ,正在尝试在部署期间安装到App Engine应用上。因此,您可能会遇到“无法分配内存”错误。
尽管我有一个具有足够内存和非常强大规格的VM实例,但我尝试自行在该库中安装该库。它停留在99%,并始终抛出“ MemoryError”。这意味着您尝试使用的该库存在一些问题。
因此,删除炬管库,添加main.py中缺少的行,然后重新部署。您必须看到成功的部署。我已经对其进行了测试,现在该应用已成功部署。