使用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实现删除Android工程中的冗余字符串
Jan 19 Python
Python随手笔记之标准类型内建函数
Dec 02 Python
python实现冒泡排序算法的两种方法
Mar 10 Python
python中的decorator的作用详解
Jul 26 Python
使用tensorflow实现线性svm
Sep 07 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
Aug 26 Python
python字符串反转的四种方法详解
Dec 02 Python
python str字符串转uuid实例
Mar 03 Python
一些关于python 装饰器的个人理解
Aug 31 Python
Python 实现微信自动回复的方法
Sep 11 Python
接口自动化多层嵌套json数据处理代码实例
Nov 20 Python
matplotlib之pyplot模块实现添加子图subplot的使用
Apr 25 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 empty函数 使用说明
2009/08/10 PHP
过滤掉PHP数组中的重复值的实现代码
2011/07/17 PHP
PHP中调用SVN命令更新网站方法
2015/01/07 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
PHP使用PDO 连接与连接管理操作实例分析
2020/04/21 PHP
在次封装easyui-Dialog插件实现代码
2010/11/14 Javascript
关于用Jquery的height()、width()计算动态插入的IMG标签的宽高的问题
2010/12/08 Javascript
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
Javascript中正则表达式的全局匹配模式分析
2011/04/26 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
2013/04/02 Javascript
jQuery+HTML5加入购物车代码分享
2020/10/29 Javascript
13个PHP函数超实用
2015/10/21 Javascript
javascript随机抽取0-100之间不重复的10个数
2016/02/25 Javascript
详解Matlab中 sort 函数用法
2016/03/20 Javascript
PHP7新特性简述
2017/06/11 Javascript
JavaScript编写棋盘覆盖代码详解
2017/08/28 Javascript
为输入框加入数字js校验代码分享
2017/11/02 Javascript
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
微信小程序背景音乐开发详解
2019/12/12 Javascript
[01:46]DOTA2上海特锦赛小组赛英文解说KotlGuy采访
2016/02/27 DOTA
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
Python pass详细介绍及实例代码
2016/11/24 Python
Python文本相似性计算之编辑距离详解
2016/11/28 Python
python编写朴素贝叶斯用于文本分类
2017/12/21 Python
pytorch实现CNN卷积神经网络
2020/02/19 Python
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
印尼美容产品购物网站:PerfectBeauty.id
2017/12/01 全球购物
lookfantastic荷兰:在线购买奢华护肤、护发和化妆品
2018/11/27 全球购物
KOHLER科勒美国官网:国际著名卫浴橱柜领先品牌
2020/06/27 全球购物
Boolean b = new Boolean(“abcde”); 会编译错误码
2013/11/27 面试题
思想汇报格式
2014/01/05 职场文书
三爱活动实施方案
2014/03/19 职场文书
旅游管理毕业生自荐信范文
2014/03/19 职场文书
房屋租赁合同协议书范本
2014/10/19 职场文书
社区国庆节活动总结
2015/03/23 职场文书
2015年环境整治工作总结
2015/05/22 职场文书