使用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获取指定目录下所有文件名列表的方法
May 20 Python
python 编程之twisted详解及简单实例
Jan 28 Python
python编写弹球游戏的实现代码
Mar 12 Python
解决nohup重定向python输出到文件不成功的问题
May 11 Python
python3+django2开发一个简单的人员管理系统过程详解
Jul 23 Python
Win10+GPU版Pytorch1.1安装的安装步骤
Sep 27 Python
python实现输入的数据在地图上生成热力图效果
Dec 06 Python
解决Python import docx出错DLL load failed的问题
Feb 13 Python
python常用运维脚本实例小结
Feb 14 Python
解决jupyter notebook显示不全出现框框或者乱码问题
Apr 09 Python
python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境
Dec 14 Python
基于PyQt5制作一个群发邮件工具
Apr 08 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
德劲1104的电路分析与改良
2021/03/01 无线电
一个程序下载的管理程序(三)
2006/10/09 PHP
php无限级分类实现方法分析
2016/10/19 PHP
PHP中STDCLASS用法实例分析
2016/11/11 PHP
php 利用socket发送GET,POST请求的实例代码
2020/07/04 PHP
jquery刷新页面的实现代码(局部及全页面刷新)
2011/07/11 Javascript
jQuery form插件之formDdata参数校验表单及验证后提交
2016/01/23 Javascript
JavaScript+html5 canvas制作色彩斑斓的正方形效果
2016/01/27 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
2016/04/05 Javascript
javascript Promise简单学习使用方法小结
2016/05/17 Javascript
javascript用正则表达式过滤空格的实现代码
2016/06/14 Javascript
Angular的$http与$location
2016/12/26 Javascript
JS常用倒计时代码实例总结
2017/02/07 Javascript
easy ui datagrid 从编辑框中获取值的方法
2017/02/22 Javascript
JavaScript禁止微信浏览器下拉回弹效果
2017/05/16 Javascript
小程序点赞收藏功能的实现代码示例
2018/09/07 Javascript
解决vue 给window添加和移除resize事件遇到的坑
2020/07/21 Javascript
简单了解vue 插值表达式Mustache
2020/07/22 Javascript
python基础教程之循环介绍
2014/08/29 Python
在windows下快速搭建web.py开发框架方法
2016/04/22 Python
Python urls.py的三种配置写法实例详解
2017/04/28 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
2018/01/29 Python
在Django中输出matplotlib生成的图片方法
2018/05/24 Python
Python实现ping指定IP的示例
2018/06/04 Python
pytorch permute维度转换方法
2018/12/14 Python
详解django+django-celery+celery的整合实战
2019/03/19 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
2019/05/31 Python
Python生成器实现简单&quot;生产者消费者&quot;模型代码实例
2020/03/27 Python
django之导入并执行自定义的函数模块图解
2020/04/01 Python
Python %r和%s区别代码实例解析
2020/04/03 Python
Keras实现DenseNet结构操作
2020/07/06 Python
简述网络文件系统NFS,并说明其作用
2016/10/19 面试题
总经理助理岗位职责
2013/11/08 职场文书
家居设计专业个人自荐信范文
2013/11/26 职场文书
纪检监察立案决定书
2015/06/24 职场文书
2007年老电脑安装win11会怎么样? 网友实测win11在老电脑运行良好
2021/11/21 数码科技