使用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实现的二叉树算法和kmp算法实例
Apr 25 Python
Python实现线程池代码分享
Jun 21 Python
Python中xrange与yield的用法实例分析
Dec 26 Python
Python 隐藏输入密码时屏幕回显的实例
Feb 19 Python
详解python编译器和解释器的区别
Jun 24 Python
python and or用法详解
Jun 26 Python
Django视图扩展类知识点详解
Oct 25 Python
python中的RSA加密与解密实例解析
Nov 18 Python
python安装dlib库报错问题及解决方法
Mar 16 Python
为什么相对PHP黑python的更少
Jun 21 Python
pytorch  网络参数 weight bias 初始化详解
Jun 24 Python
Django drf请求模块源码解析
Jun 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
用php的ob_start来生成静态页面的方法分析
2011/03/09 PHP
PHP-redis中文文档介绍
2013/02/07 PHP
php连接函数implode与分割explode的深入解析
2013/06/26 PHP
Thinkphp5框架使用validate实现验证功能的方法
2019/08/27 PHP
jQuery Deferred和Promise创建响应式应用程序详细介绍
2013/03/05 Javascript
Javascript 浮点运算精度问题分析与解决
2014/03/26 Javascript
Backbone.js框架中简单的View视图编写学习笔记
2016/02/14 Javascript
jquery UI Datepicker时间控件的使用及问题解决
2016/04/28 Javascript
基于BootStrap Metronic开发框架经验小结【二】列表分页处理和插件JSTree的使用
2016/05/12 Javascript
Angular2 (RC4) 路由与导航详解
2016/09/21 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
2016/10/12 Javascript
JavaScript 最佳实践:帮你提升代码质量
2016/12/03 Javascript
详解Vue自定义过滤器的实现
2017/01/10 Javascript
JavaScript正则获取地址栏中参数的方法
2017/03/02 Javascript
jQuery简介_动力节点Java学院整理
2017/07/04 jQuery
修改Nodejs内置的npm默认配置路径方法
2018/05/13 NodeJs
JavaScript ES6中的简写语法总结与使用技巧
2018/12/30 Javascript
ES6学习笔记之字符串、数组、对象、函数新增知识点实例分析
2020/01/22 Javascript
如何在JavaScript中正确处理变量
2020/12/25 Javascript
Python中创建字典的几种方法总结(推荐)
2017/04/27 Python
python 日志增量抓取实现方法
2018/04/28 Python
python 列表中[ ]中冒号‘:’的作用
2019/04/30 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
2019/08/01 Python
Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】
2019/10/11 Python
Python面向对象之多态原理与用法案例分析
2019/12/30 Python
如何使用python传入不确定个数参数
2020/02/18 Python
解决jupyter notebook 出现In[*]的问题
2020/04/13 Python
localStorage、sessionStorage使用总结
2017/11/17 HTML / CSS
工作交流会欢迎词
2014/01/12 职场文书
三万活动总结
2014/04/28 职场文书
贸易经济专业自荐书
2014/06/29 职场文书
数学教研活动总结
2014/07/02 职场文书
《孙子兵法》:欲成大事者,需读懂这些致胜策略
2019/08/23 职场文书
Java常用函数式接口总结
2021/06/29 Java/Android
自动在Windows中运行Python脚本并定时触发功能实现
2021/09/04 Python
python热力图实现的完整实例
2022/06/25 Python