使用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的Django框架测试驱动开发的教程
Apr 22 Python
Python中列表和元组的相关语句和方法讲解
Aug 20 Python
Python tkinter事件高级用法实例
Jan 31 Python
详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击
Oct 09 Python
Python实现一个数组除以一个数的例子
Jul 20 Python
python爬虫项目设置一个中断重连的程序的实现
Jul 26 Python
使用python的turtle绘画滑稽脸实例
Nov 21 Python
基于python判断目录或者文件代码实例
Nov 29 Python
解决 jupyter notebook 回车换两行问题
Apr 15 Python
pycharm 实现本地写代码,服务器运行的操作
Jun 08 Python
解决Keras使用GPU资源耗尽的问题
Jun 22 Python
Python装饰器如何实现修复过程解析
Sep 05 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 If Else(elsefi) 语句
2013/04/07 PHP
PHP数据过滤的方法
2013/10/30 PHP
PHP解析目录路径的3个函数总结
2014/11/18 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
2016/01/05 PHP
Ext面向对象开发实践(续)
2008/11/18 Javascript
JQuery 操作Javascript对象和数组的工具函数小结
2010/01/22 Javascript
计算新浪Weibo消息长度(还可以输入119字)
2013/07/02 Javascript
jQuery实现的左右移动焦点图效果
2016/01/14 Javascript
学习JavaScript事件流和事件处理程序
2016/01/25 Javascript
JS通过Cookie判断页面是否为首次打开
2016/02/05 Javascript
jquery 判断div show的状态实例
2016/12/03 Javascript
jQuery设置和获取select、checkbox、radio的选中值方法
2017/01/01 Javascript
gulp加批处理(.bat)实现ng多应用一键自动化构建
2017/02/16 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
vue中el-upload上传图片到七牛的示例代码
2018/10/19 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2020/05/27 Javascript
Python打印scrapy蜘蛛抓取树结构的方法
2015/04/08 Python
Python有序查找算法之二分法实例分析
2017/12/11 Python
对python的文件内注释 help注释方法
2018/05/23 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
2019/07/11 Python
Python可变对象与不可变对象原理解析
2020/02/25 Python
python爬取招聘要求等信息实例
2020/11/20 Python
HTML5对比HTML4的主要改变和改进总结
2016/05/27 HTML / CSS
比较一下entity bean和session bean
2013/12/27 面试题
七一表彰活动方案
2014/01/18 职场文书
简历上的自我评价
2014/02/03 职场文书
春节联欢会主持词
2014/03/24 职场文书
大学生英语演讲稿
2014/04/24 职场文书
工作岗位说明书模板
2014/05/09 职场文书
建筑结构施工求职信
2014/07/11 职场文书
公司领导九九重阳节发言稿2014
2014/09/25 职场文书
公司前台接待岗位职责
2015/04/03 职场文书
2016春季幼儿园开学寄语
2015/12/03 职场文书
2016年党员读书月活动总结
2016/04/06 职场文书
解决 redis 无法远程连接
2022/05/15 Redis
Win11任务栏无法正常显示 资源管理器不停重启的解决方法
2022/07/07 数码科技