AE2.0 应用运行在一个独立的沙箱容器中(沙箱目录为:/ace/user/virtualenv ) ,使用Python2.7官方版本,开发者面对原生的Python环境。
注:如需登录VM运行Python命令或安装依赖, 请使用/ace/user/virtualenv/bin/python 和/ace/user/virtualenv/bin/pip 来执行,不要直接使用系统目录中Python。
WSGI的全称是Web Server Gateway Interface,是一个描述Web服务器和Web应用之间如何通信的规范。PEP-333对其有详细的说明。
TAE遵循标准WSGI规范,TAE作为WSGI Server,你的应用是WSGI Client。你必须提供index.py文件,其中包含名为application的callable对象,application接受两个参 数,PEP-333里的environ和start_response,所有的请求都会路由到application。
当然,如果你使用了框架,一般不需要自己编写application,框架已经帮你搞定了。
在TAE的环境里,用户的代码放在/ace/code目录下,同时这个目录已经加入到sys.path里,如果你的代码根目录里有个文件 hello.py,那么你可以通过/ace/code/hello.py访问这个文件,也可以在其他Python模块里直接import hello导入这个模块。
运行Python应用需要依赖index.py文件,index.py是一个标准的WSGI Client,需要在代码根目录中存在。示例如下:
def application(environ, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) return '<h1>Hello, web!</h1>'
如果有临时文件,可以写到/tmp目录下,这个目录也是应用独占的,不会跟其他应用共享。
import web urls = ( '/', 'index', '/proxy', 'proxy' ) class index: def GET(self): return "Hello, world!" application = web.application(urls, globals()).wsgifunc()
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return 'hi' application = app.wsgi_app
from django.core.wsgi import get_wsgi_application application = get_wsgi_application()
作为一个Python应用,难免依赖一些开源的Python库。你完全不用自己在代码里带上这些依赖,只要告诉TAE, 系统会自动帮你安装的。
在你应用根目录放上创建一个文件:requirements.txt,写入所有依赖的lib,每个一行,如果要依赖特定的版本,在lib名字后加上==version即可。
web.py flask==0.1.0 alibaba-python-sdk
注意:alibaba-python-sdk为TAE内部提供的python库,包含TAE提供的云服务SDK,安装时不需要指定版本。 安装alibaba-python-sdk时系统会自动安装MySQL-python,不需要再单独安装。
注意:有些lib需要编译安装,要求机器上先安装相应的头文件, TAE机器上不可能预先安装所有的头文件,所以,如果你依赖了需要编译安装的lib,可能会启动失败。遇到这种情况,你可以提工单,把需要安装的lib告诉我们,对于需求比较多的lib,我们会预先安装头文件。