使用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映射列表实例分析
Jan 26 Python
在Python中使用成员运算符的示例
May 13 Python
Python守护进程用法实例分析
Jun 04 Python
python 实现分页显示从es中获取的数据方法
Dec 26 Python
python按照多个条件排序的方法
Feb 08 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
Feb 14 Python
django celery redis使用具体实践
Apr 08 Python
python面试题小结附答案实例代码
Apr 11 Python
tensorflow多维张量计算实例
Feb 11 Python
python3格式化字符串 f-string的高级用法(推荐)
Mar 04 Python
关于Python解包知识点总结
May 05 Python
解决Pytorch修改预训练模型时遇到key不匹配的情况
Jun 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生成随机密码的三种方法小结
2010/09/04 PHP
Smarty中调用FCKeditor的方法
2014/10/27 PHP
ThinkPHP自动完成中使用函数与回调方法实例
2014/11/29 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象
2010/01/15 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
2013/10/30 Javascript
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
为jquery的ajaxfileupload增加附加参数的方法
2014/03/04 Javascript
js控制再次点击按钮之间的间隔时间可防止重复提交
2014/08/01 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
2016/03/10 Javascript
详细讲解JavaScript中的this绑定
2016/10/10 Javascript
angular双向绑定模拟探索
2016/12/26 Javascript
Linux CentOS系统下安装node.js与express的方法
2017/04/01 Javascript
bootstrap multiselect下拉列表功能
2017/08/22 Javascript
Vue from-validate 表单验证的示例代码
2017/09/26 Javascript
vue路由嵌套的SPA实现步骤
2017/11/06 Javascript
vue富文本框(插入文本、图片、视频)的使用及问题小结
2018/08/17 Javascript
nodejs实现的http、https 请求封装操作示例
2020/02/06 NodeJs
Postman动态获取返回值过程详解
2020/06/30 Javascript
详解Vue数据驱动原理
2020/11/17 Javascript
Python之多线程爬虫抓取网页图片的示例代码
2018/01/10 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
2019/06/19 Python
python数据挖掘需要学的内容
2019/06/23 Python
Python函数中参数是传递值还是引用详解
2019/07/02 Python
在python中,使用scatter绘制散点图的实例
2019/07/03 Python
基于Python检测动态物体颜色过程解析
2019/12/04 Python
Python实现Wordcloud生成词云图的示例
2020/03/30 Python
在keras里实现自定义上采样层
2020/06/28 Python
使用before和:after伪类制作css3圆形按钮
2014/04/08 HTML / CSS
法国珠宝店:CLEOR
2017/01/29 全球购物
澳大利亚UGG工厂直销:Australian Ugg Boots
2017/10/14 全球购物
TUMI马来西亚官方网站:国际领先的高品质商旅箱包品牌
2018/04/26 全球购物
实习协议书范本
2014/04/22 职场文书
中学生英语演讲稿
2014/04/26 职场文书
八达岭长城导游词
2015/01/30 职场文书
2015年高校图书馆工作总结
2015/04/30 职场文书