使用SAE部署Python运行环境的教程
因为GAE在国内访问不便,所以平时有一些小应用,我都会放在SAE上面,虽然SAE还有很多缺陷,但算是上手比较容易的一个了,最起码文档写的不错。
开发SAE上的应用,我一般都用Flask,SAE预装了Flask,所以你可以直接用,但我们难免会用一些没有预装的库。
如果是在以前,可能需要自己将package挨个copy到应用目录中,然后手动加载,现在嘛,不需要那么麻烦了,SAE有个非常不错的解决方案,见《安装依赖的第三方包》
你可以使用saecloud来代替pip安装第三方库
saecloudinstall-rrequirements.txt
这条命令会将第三方库安装在应用目录的site-packages目录下面,部署时可以将所有的依赖打包成zip档案,这样上传和维护都很方便。
cdsite-packages/ zip-r../site-packages.zip.
在index.wsgi中将这些依赖加载进来
importos importsys root=os.path.dirname(__file__) #两者取其一 sys.path.insert(0,os.path.join(root,'site-packages')) sys.path.insert(0,os.path.join(root,'site-packages.zip'))
虽然是二者取其一,但学是推荐使用zip档案的方式。
有个问题是,我们需要打包的,只是SAE没有预装的包,但我们本地开发还要依赖Flask这些预装的包,都使用saecloud安装的话,这个包明显就会有冗余。
借鉴于bower,npm这些包管理器的依赖管理的优点,我们显然应该将依赖库分离出来。
#安装非预装依赖 pipinstall-rrequirements.txt #维护预装依赖 saecloudinstall-rrequirements-dev.txt
这样,只有requirements.txt中的包会被安装到应用目录下的site-packages文件夹中。
经过一些实践,我整理了自己用着比较顺手的源代码文件结构
LICENSE Makefile README.md requirements-dev.txt requirements.txt site-packages ... site <---webapp目录 index.wsgi main.py config.yam site-packages.zip <---打包的依赖库 ...
我会将下面的文件加入到.gitignore,以避免它们被提交到版本中。
/site-packages /site/site-packages.zip /site/index.wsgic
为了方便安装依赖和部署项目,我写了个Makefile