使用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 enumerate遍历数组示例应用
Sep 06 Python
Python 实现文件的全备份和差异备份详解
Dec 27 Python
python中numpy包使用教程之数组和相关操作详解
Jul 30 Python
Python使用win32 COM实现Excel的写入与保存功能示例
May 03 Python
使用实现XlsxWriter创建Excel文件并编辑
May 04 Python
解决Python运行文件出现out of memory框的问题
Dec 03 Python
python Pillow图像处理方法汇总
Oct 16 Python
python通过对字典的排序,对json字段进行排序的实例
Feb 27 Python
django ListView的使用 ListView中获取url中的参数值方式
Mar 27 Python
Windows下Anaconda安装、换源与更新的方法
Apr 17 Python
python 制作python包,封装成可用模块教程
Jul 13 Python
如何基于Python实现word文档重新排版
Sep 29 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
打造计数器DIY三步曲(下)
2006/10/09 PHP
PHP的开发框架的现状和展望
2007/03/16 PHP
Yii2框架dropDownList下拉菜单用法实例分析
2016/07/18 PHP
Laravel5.4框架使用socialite实现github登录的方法
2019/03/20 PHP
浅谈PHP5.6 与 PHP7.0 区别
2019/10/09 PHP
在b/s开发中经常用到的javaScript技术
2006/08/23 Javascript
jQuery之选项卡的简单实现
2014/02/28 Javascript
jQuery的实例及必知重要的jQuery选择器详解
2016/05/20 Javascript
NodeJs——入门必看攻略
2016/06/27 NodeJs
javascript事件的传播基础实例讲解(35)
2017/02/14 Javascript
利用JS对iframe父子(内外)页面进行操作的方法教程
2017/06/15 Javascript
jQuery简介_动力节点Java学院整理
2017/07/04 jQuery
Angular项目从新建、打包到nginx部署全过程记录
2017/12/09 Javascript
其实你可以少写点if else与switch(推荐)
2019/01/10 Javascript
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
小程序实现tab标签页
2020/11/16 Javascript
跟老齐学Python之通过Python连接数据库
2014/10/28 Python
理解Python中的类与实例
2015/04/27 Python
python抓取并保存html页面时乱码问题的解决方法
2016/07/01 Python
python爬虫headers设置后无效的解决方法
2017/10/21 Python
Python实现读取txt文件并转换为excel的方法示例
2018/05/17 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
2018/08/31 Python
谈谈python垃圾回收机制
2020/09/27 Python
python数据抓取3种方法总结
2021/02/07 Python
美国社交购物市场:MassGenie
2019/02/18 全球购物
Lancer Skincare官方网站:抗衰老皮肤护理
2020/11/20 全球购物
北京某公司的.net笔试题
2014/03/20 面试题
西安夏日科技有限公司Java笔试题
2013/01/11 面试题
希特勒的演讲稿
2014/05/23 职场文书
法人委托书范本格式
2014/09/15 职场文书
优秀班集体申报材料
2014/12/25 职场文书
上课迟到检讨书范文
2015/05/06 职场文书
早上好问候语大全
2015/11/10 职场文书
优秀乡村医生事迹材料(2016精选版)
2016/02/29 职场文书
Spring整合Mybatis的全过程
2021/06/28 Java/Android
mysql 索引合并的使用
2021/08/30 MySQL