使用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中threading模块的几个常用方法
Jun 18 Python
Python双精度浮点数运算并分行显示操作示例
Jul 21 Python
解决python selenium3启动不了firefox的问题
Oct 13 Python
浅谈pycharm下找不到sqlalchemy的问题
Dec 03 Python
在python带权重的列表中随机取值的方法
Jan 23 Python
Python3日期与时间戳转换的几种方法详解
Jun 04 Python
python处理大日志文件
Jul 23 Python
Django集成celery发送异步邮件实例
Dec 17 Python
使用Pytorch来拟合函数方式
Jan 14 Python
使用keras和tensorflow保存为可部署的pb格式
May 25 Python
区分python中的进程与线程
Aug 13 Python
python中用Scrapy实现定时爬虫的实例讲解
Jan 18 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
第三节--定义一个类
2006/11/16 PHP
ajax+php打造进度条 readyState各状态
2010/03/20 PHP
php 调用ffmpeg获取视频信息的简单实现
2017/04/03 PHP
JavaScript 获得选中文本内容的方法
2009/02/15 Javascript
jquery操作select方法汇总
2015/02/05 Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
2015/11/24 Javascript
JavaScript中的原型prototype完全解析
2016/05/10 Javascript
Vue自定义事件(详解)
2017/08/19 Javascript
微信小程序实现验证码获取倒计时效果
2018/02/08 Javascript
微信小程序项目实践之验证码倒计时功能
2018/07/18 Javascript
在微信小程序中使用vant的方法
2019/06/07 Javascript
完美解决通过IP地址访问VUE项目的问题
2020/07/18 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
解决Vue-cli3没有vue.config.js文件夹及配置vue项目域名的问题
2020/12/04 Vue.js
[17:36]VG战队纪录片
2014/08/21 DOTA
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
分析python服务器拒绝服务攻击代码
2014/01/16 Python
Django框架下在视图中使用模版的方法
2015/07/16 Python
解读Python编程中的命名空间与作用域
2015/10/16 Python
Python数据类型学习笔记
2016/01/13 Python
Python环境下安装使用异步任务队列包Celery的基础教程
2016/05/07 Python
python+django快速实现文件上传
2016/10/24 Python
python实现俄罗斯方块游戏
2020/03/25 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
ML神器:sklearn的快速使用及入门
2019/07/11 Python
如何基于windows实现python定时爬虫
2020/05/01 Python
canvas实现飞机打怪兽射击小游戏的示例代码
2018/07/09 HTML / CSS
HTML5+lufylegend实现游戏中的卷轴
2016/02/29 HTML / CSS
巴西葡萄酒销售网站:Wine.com.br
2017/11/07 全球购物
Pat McGrath Labs官网:世界上最有影响力的化妆师推出的彩妆品牌
2018/01/07 全球购物
世界领先的电子书网站:eBooks.com(在线购买小说、非小说和教科书)
2019/03/30 全球购物
园林设计专业毕业生求职信
2014/03/23 职场文书
本科毕业生自荐信
2014/05/26 职场文书
初中家长意见
2015/06/03 职场文书
休学证明范本
2015/06/19 职场文书
Redis主从配置和底层实现原理解析(实战记录)
2021/06/30 Redis