使用SAE部署Python运行环境的教程


Posted in Python onMay 05, 2015

因为 GAE 在国内访问不便,所以平时有一些小应用,我都会放在 SAE 上面, 虽然 SAE 还有很多缺陷,但算是上手比较容易的一个了,最起码文档写的不错。

开发 SAE 上的应用,我一般都用 Flask,SAE 预装了 Flask,所以你可以直接用, 但我们难免会用一些没有预装的库。

如果是在以前,可能需要自己将 package 挨个 copy 到应用目录中,然后手动加载, 现在嘛,不需要那么麻烦了,SAE 有个非常不错的解决方案,见《安装依赖的第三方包》

你可以使用 saecloud 来代替 pip 安装第三方库

saecloud install -r requirements.txt

这条命令会将第三方库安装在应用目录的 site-packages 目录下面,部署时可以将所有的依赖 打包成 zip 档案,这样上传和维护都很方便。

cd site-packages/
zip -r ../site-packages.zip .

在 index.wsgi 中将这些依赖加载进来

import os
import sys

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 这些包管理器的依赖管理的优点, 我们显然应该将依赖库分离出来。

# 安装非预装依赖
pip install -r requirements.txt
# 维护预装依赖
saecloud install -r requirements-dev.txt

这样,只有 requirements.txt 中的包会被安装到应用目录下的 site-packages 文件夹中。

经过一些实践,我整理了自己用着比较顺手的源代码文件结构

LICENSE

Makefile

README.md

requirements-dev.txt

requirements.txt

site-packages

  ...

site   <--- web app 目录

  index.wsgi

  main.py

  config.yam

  site-packages.zip   <--- 打包的依赖库

  ...

我会将下面的文件加入到 .gitignore,以避免它们被提交到版本中。

/site-packages

/site/site-packages.zip

/site/index.wsgic

为了方便安装依赖和部署项目,我写了个 Makefile

Python 相关文章推荐
Python新手在作用域方面经常容易碰到的问题
Apr 03 Python
在Mac OS系统上安装Python的Pillow库的教程
Nov 20 Python
python构建自定义回调函数详解
Jun 20 Python
基于python 二维数组及画图的实例详解
Apr 03 Python
python numpy数组的索引和切片的操作方法
Oct 20 Python
使用python PIL库实现简单验证码的去噪方法步骤
May 10 Python
Python中zip()函数的解释和可视化(实例详解)
Feb 16 Python
学习Python列表的基础知识汇总
Mar 10 Python
利用jupyter网页版本进行python函数查询方式
Apr 14 Python
解决 jupyter notebook 回车换两行问题
Apr 15 Python
matplotlib.pyplot.plot()参数使用详解
Jul 28 Python
用python实现一个简单的验证码
Dec 09 Python
在Python中使用PIL模块对图片进行高斯模糊处理的教程
May 05 #Python
在Python中使用mechanize模块模拟浏览器功能
May 05 #Python
python实现自动更换ip的方法
May 05 #Python
浅谈MySQL中的触发器
May 05 #Python
python去除所有html标签的方法
May 05 #Python
python实现将汉字转换成汉语拼音的库
May 05 #Python
python基于Tkinter库实现简单文本编辑器实例
May 05 #Python
You might like
亲密接触PHP之PHP语法学习笔记1
2006/12/17 PHP
PHP实现可精确验证身份证号码的工具类示例
2018/05/31 PHP
Jquery实战_读书笔记2 选择器
2010/01/22 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
HTML Color Picker(js拾色器效果)
2013/08/27 Javascript
Javascript浅谈之引用类型
2013/12/18 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
2014/02/21 Javascript
javascript屏蔽右键代码
2014/05/15 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
2014/10/31 Javascript
angularjs学习笔记之简单介绍
2015/09/26 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
2015/12/18 Javascript
全面解析node 表单的图片上传
2016/11/21 Javascript
gulp解决跨域的配置文件问题
2017/06/08 Javascript
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
2017/08/10 Javascript
微信小程序canvas开发水果老虎机的思路详解
2020/02/07 Javascript
Python实现数据可视化看如何监控你的爬虫状态【推荐】
2018/08/10 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
python实现根据文件关键字进行切分为多个文件的示例
2018/12/10 Python
用uWSGI和Nginx部署Flask项目的方法示例
2019/05/05 Python
pytorch制作自己的LMDB数据操作示例
2019/12/18 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
一套PHP的笔试题
2013/05/31 面试题
介绍一下OSI七层模型
2012/07/03 面试题
音乐系毕业生自荐信
2013/10/27 职场文书
后勤部经理岗位职责
2014/02/23 职场文书
担保书怎么写
2014/04/01 职场文书
中班下学期幼儿评语
2014/12/30 职场文书
六一领导慰问欢迎词
2015/01/26 职场文书
2015年高考寄语或鼓励的话
2015/03/23 职场文书
爱心捐书倡议书
2015/04/27 职场文书
2015年检验员工作总结范文
2015/04/30 职场文书
亲戚关系证明
2015/06/24 职场文书
导游词之沈阳植物园
2019/11/30 职场文书
Js类的构建与继承案例详解
2021/09/15 Javascript