使用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中的迭代器漫谈
Feb 03 Python
python实现的简单猜数字游戏
Apr 04 Python
Python内置函数——__import__ 的使用方法
Nov 24 Python
Python实现PS图像调整之对比度调整功能示例
Jan 26 Python
python实现Adapter模式实例代码
Feb 09 Python
Django 创建/删除用户的示例代码
Jul 24 Python
Python Pandas对缺失值的处理方法
Sep 27 Python
python求质数列表的例子
Nov 24 Python
如何在Anaconda中打开python自带idle
Sep 21 Python
PyTorch 实现L2正则化以及Dropout的操作
May 27 Python
详解pytorch创建tensor函数
Mar 22 Python
python中validators库的使用方法详解
Sep 23 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
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
PHP易混淆知识整理笔记
2015/09/24 PHP
PHP使用Pear发送邮件(Windows环境)
2016/01/05 PHP
微信支付的开发流程详解
2016/09/13 PHP
PHP获取页面执行时间的方法(推荐)
2016/12/10 PHP
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
javascript 验证日期的函数
2010/03/18 Javascript
javascript开发中因空格引发的错误
2010/11/08 Javascript
jquery动态添加option示例
2013/12/30 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
2015/04/06 Javascript
详解jQuery中的deferred对象的使用(一)
2016/05/27 Javascript
有关jQuery中parent()和siblings()的小问题
2016/06/01 Javascript
Bootstrap源码解读下拉菜单(4)
2016/12/23 Javascript
使用JavaScript为一张图片设置备选路径的方法
2017/01/04 Javascript
原生Javascript插件开发实践
2017/01/18 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
2017/03/25 jQuery
一个简易的js图片轮播效果
2017/07/22 Javascript
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
2018/01/25 jQuery
vue的常用组件操作方法应用分析
2018/04/13 Javascript
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
Django自定义分页效果
2017/06/27 Python
Python实现繁?转为简体的方法示例
2018/12/18 Python
OpenCV3.0+Python3.6实现特定颜色的物体追踪
2019/07/23 Python
Python图片的横坐标汉字实例
2019/12/04 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
2020/03/08 Python
Python用来做Web开发的优势有哪些
2020/08/05 Python
美国南部最大的家族百货公司:Belk
2017/01/30 全球购物
美国校服网上商店:French Toast
2019/10/08 全球购物
总经理职责范文
2013/11/08 职场文书
成功经营餐厅的创业计划书范文
2013/12/26 职场文书
《桥》教学反思
2014/04/09 职场文书
珍惜资源保护环境的建议书
2014/05/14 职场文书
大学新生入学教育方案
2014/05/16 职场文书
药品销售内勤岗位职责
2015/04/13 职场文书
张思德观后感
2015/06/09 职场文书
Django给表单添加honeypot验证增加安全性
2021/05/06 Python