使用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 运算符 供重载参考
Jun 11 Python
python实现指定字符串补全空格的方法
Apr 30 Python
Python判断文件和字符串编码类型的实例
Dec 21 Python
Python设计模式之观察者模式简单示例
Jan 10 Python
pandas去重复行并分类汇总的实现方法
Jan 29 Python
PyCharm使用Docker镜像搭建Python开发环境
Dec 26 Python
Python + selenium + crontab实现每日定时自动打卡功能
Mar 31 Python
Python配置pip国内镜像源的实现
Aug 20 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
Aug 27 Python
python rsa-oaep加密的示例代码
Sep 23 Python
Python eval函数原理及用法解析
Nov 14 Python
Pandas直接读取sql脚本的方法
Jan 21 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 array_multisort()函数的使用札记
2011/07/03 PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
2011/12/05 PHP
php计算程序运行时间的简单例子分享
2014/05/10 PHP
PHP 二维数组和三维数组的过滤
2016/03/16 PHP
PHP常用的三种设计模式汇总
2016/08/28 PHP
laravel5实现微信第三方登录功能
2018/12/06 PHP
让焦点自动跳转
2006/07/01 Javascript
动态样式类封装JS代码
2009/09/02 Javascript
JS自动适应的图片弹窗实例
2013/06/29 Javascript
js获取会话框prompt的返回值的方法
2015/01/10 Javascript
javascript求日期差的方法
2016/03/02 Javascript
详解Matlab中 sort 函数用法
2016/03/20 Javascript
学习vue.js条件渲染
2016/12/03 Javascript
Nodejs 发送Post请求功能(发短信验证码例子)
2017/02/09 NodeJs
JSONP基础知识详解
2017/03/19 Javascript
vue.js的computed,filter,get,set的用法及区别详解
2018/03/08 Javascript
vue.js 实现点击按钮动态添加li的方法
2018/09/07 Javascript
js数组去重的方法总结
2019/01/18 Javascript
JS实现数组深拷贝的方法分析
2019/03/06 Javascript
three.js 将图片马赛克化的示例代码
2020/07/31 Javascript
vue项目实现减少app.js和vender.js的体积操作
2020/11/12 Javascript
Python Dataframe 指定多列去重、求差集的方法
2018/07/10 Python
Python3 实现串口两进程同时读写
2019/06/12 Python
Python 找出出现次数超过数组长度一半的元素实例
2020/05/11 Python
总结python 三种常见的内存泄漏场景
2020/11/20 Python
CSS3让登陆面板3D旋转起来
2016/05/03 HTML / CSS
广告业务员岗位职责
2014/02/06 职场文书
学生打架检讨书
2014/02/14 职场文书
《乡愁》教学反思
2014/02/18 职场文书
家长学校教学计划
2015/01/19 职场文书
新闻简讯格式及范文
2015/07/22 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
浅谈Golang 嵌套 interface 的赋值问题
2021/04/29 Golang
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
2022/03/03 Python
Python编程中内置的NotImplemented类型的用法
2022/03/23 Python
vue使用element-ui按需引入
2022/05/20 Vue.js