从Web服务器访问时,Python无法导入

时间:2018-04-05 06:09:54

标签: python google-app-engine tensorflow

从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

1 个答案:

答案 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