从Web服务器访问时不会导入Python
我是Python和Google App Engine的新手,这可能就是我无法弄清楚这个简单问题的原因。
我刚刚启动了Google App Engine并完成了Hello world的事情。我启动了Web服务器,我可以在浏览器中看到hello world。它运作良好。
由于我需要使用tensorflow来开发我的应用程序,因此我将其导入为下面的第2行。
import webapp2
import tensorflow
class MainPage(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.write('Hello, World!')
app = webapp2.WSGIApplication([
('/', MainPage),
], debug=True)
现在它不起作用并产生ImportError: No module named tensorflow
。
事实上,Tensorflow已正确安装,脚本在我的命令行中运行良好。
我编写了其他脚本,它们始终使用命令行正确导入,但从Web服务器访问时无法导入。
我的猜测是,这是Web服务器进程的权限问题(因为它是访问相关python脚本的那个),但我不确定。
请帮忙。
[更新和补充信息1]
在原帖中,我将问题简化为易于沟通。但实际上我想导入6个库,如下所示。
import webapp2
import base64
import json
import tensorflow as tf
from googleapiclient import discovery
from google.oauth2 import service_account
当脚本通过Cloud Shell命令行运行时,所有这些都成功导入。
但是,从Web服务器访问时,前3个库(即webapp2,base64,joson)已成功导入,但最后3个库(即tensorflow,Googleapiclient,googel.oauth2)未导入。
在Google App Engine中,当从Web服务器进程访问时,python脚本如何不导入谷歌库?
[更新和补充信息2]
我没有更改文件夹,而且非常简单。 在hello_world文件夹中,有四个文件,app.yaml,main.py,main.pyc,requirements.txt
我离开了app.yaml,如下图所示。
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /.*
script: main.app
我在requirements.txt中列出了如下所示的库并运行pip install -t lib -r requirements.txt
,但它无法解决问题。
webapp2==2.5.2
webob==1.8.0
google-api-python-client==1.6.5
google-auth==1.4.1
google-auth-httplib2==0.0.3
答案 0 :(得分:0)
App Engine Standard解释了应用程序限制here:解释器无法使用C代码加载Python服务;它是纯粹的" Python环境。由于TensorFlow在C中有代码,因此除非修改Python解释器(未提取),否则它无法工作。
因此TensorFlow更适合App Engine Flexible。按照此quickstart获取Flexible环境的等效代码解决方案。
在安装虚拟环境之前,修改requirements.txt
以添加TensorFlow依赖项链接,如您所见[{3}}并继续安装 quickstart here 。
main.py
生成的测试代码:
# [START app]
import logging
import tensorflow as tf
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
"""Return a friendly HTTP greeting."""
#return 'Hello World!'
return tf.Session().run(tf.constant('Hello, TensorFlow!'))
@app.errorhandler(500)
def server_error(e):
logging.exception('An error occurred during a request.')
return """
An internal error occurred: <pre>{}</pre>
See logs for full stacktrace.
""".format(e), 500
if __name__ == '__main__':
# This is used when running locally. Gunicorn is used to run the
# application on Google App Engine. See entrypoint in app.yaml.
app.run(host='127.0.0.1', port=8080, debug=True)
# [END app]
requirements.txt
的结果条目是:
Flask==0.12.2
gunicorn==19.7.1
https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.6.0-cp27-none-linux_x86_64.whl