使用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 08 Python
python检测远程服务器tcp端口的方法
Mar 14 Python
在windows下快速搭建web.py开发框架方法
Apr 22 Python
Python编程实现的简单Web服务器示例
Jun 22 Python
TensorFlow的权值更新方法
Jun 14 Python
利用python-docx模块写批量生日邀请函
Aug 26 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
Dec 22 Python
Pandas DataFrame求差集的示例代码
Dec 13 Python
Python try except else使用详解
Jan 12 Python
Python selenium模拟网页点击爬虫交管12123违章数据
May 26 Python
pytorch中的 .view()函数的用法介绍
Mar 17 Python
python内置模块之上下文管理contextlib
Jun 14 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
全国FM电台频率大全 - 10 江苏省
2020/03/11 无线电
QueryPath PHP 中的jQuery
2010/04/11 PHP
php获取汉字首字母的函数
2013/11/07 PHP
php简单实现发送带附件的邮件
2015/06/10 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
javascript 鼠标拖动图标技术
2010/02/07 Javascript
js 异步操作回调函数如何控制执行顺序
2013/12/24 Javascript
学习JavaScript设计模式之状态模式
2016/01/08 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
jQuery 移动端拖拽(模块化开发,触摸事件,webpack)
2016/10/28 Javascript
对称加密与非对称加密优缺点详解
2017/02/06 Javascript
JS实现弹出下载对话框及常见文件类型的下载
2017/07/13 Javascript
基于react组件之间的参数传递(详解)
2017/09/05 Javascript
Vue中使用 setTimeout() setInterval()函数的问题
2018/09/13 Javascript
Jquery的Ajax技术使用方法
2019/01/21 jQuery
Vue.js watch监视属性知识点总结
2019/11/11 Javascript
python获取指定路径下所有指定后缀文件的方法
2015/05/26 Python
更改Ubuntu默认python版本的两种方法python-&gt; Anaconda
2016/12/18 Python
python 对txt中每行内容进行批量替换的方法
2018/07/11 Python
Python常见数据结构之栈与队列用法示例
2019/01/14 Python
PyCharm设置每行最大长度限制的方法
2019/01/16 Python
python感知机实现代码
2019/01/18 Python
Python 转换文本编码实现解析
2019/08/27 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
python 利用已有Ner模型进行数据清洗合并代码
2019/12/24 Python
基于matplotlib中ion()和ioff()的使用详解
2020/06/16 Python
python 实现逻辑回归
2020/12/30 Python
使用CSS3的appearance属性改变任何元素的浏览器默认风格
2012/12/24 HTML / CSS
美国第一香水网站:Perfume.com
2017/01/23 全球购物
阿联酋网上花店:Ferns N Petals
2018/02/14 全球购物
舞蹈教育学专业推荐信
2013/11/27 职场文书
大二法学专业职业生涯规划范文
2014/02/12 职场文书
葛优非诚勿扰搞笑征婚台词
2014/03/17 职场文书
企业元宵节主持词
2014/03/25 职场文书
蛋糕店创业计划书
2014/05/06 职场文书
Python Django框架介绍之模板标签及模板的继承
2021/05/27 Python