`
qubic
  • 浏览: 26172 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

在Google App Engine上用zipimport引入新版的Django

阅读更多

很久以前就在注册了GAE,好像只有联通的GSM号才能注册,幸好上次卡丢了后办了张联通的。

言归正传,GAE自带的django是0.96版,我是追新一族,既然有1.0干嘛不用呢。官方原来有一篇文章介绍如何引入django开发版到GAE的,同样适用于1.0,具体是把django解压到自己的应用目录下,然后在main.py加几行代码禁用0.96并引入新版本,不过那篇文章有两行代码没有缩进,问题不大。但是这个方法不太好,由于GAE有1000个文件数量限制,django的文件太多,精简后还有400多,万一以后要引入javascript、css库或者写的程序文件多了就不好办了。

原文找不到了,今天搜索的时候发现官方又出来一篇文章 ,介绍把django压缩包放到应用目录下然后用zipimport引入到GAE。由于GAE还限制单个文件不能超过1M,所以必须精简django,推荐删除以下文件:

  1. django/conf/locale/* (如有需要保留en和zh_CN)
  2. django/contrib/admin (这个被google禁用了)
  3. django/contrib/admindocs
  4. django/contrib/gis (这个是地理信息模块比较大)
  5. django/*.pyc (这类文件不必要)

压缩一下就只有649KB了,好将这个压缩包放到自己的应用目录下

然后就是改main.py了

import logging, os, sys

# Google App Engine imports.
from google.appengine.ext.webapp import util

# Remove the standard version of Django.
for k in [k for k in sys.modules if k.startswith('django')]:
  del sys.modules[k]

# Force sys.path to have our own directory first, in case we want to import
# from it.
if os.name=='nt':
    os.unlink=lambda :None

# Add Django 1.0 archive to the path.
django_path = 'django.zip'
sys.path.insert(0, django_path)

# Must set this env var *before* importing any part of Django
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

import django.core.handlers.wsgi
import django.core.signals
import django.db
import django.dispatch.dispatcher

def log_exception(*args, **kwds):
    logging.exception('Exception in request:')
    # Log errors.
    django.dispatch.dispatcher.connect(log_exception, django.core.signals.got_request_exception)
    # Unregister the rollback event handler.
    django.dispatch.dispatcher.disconnect(django.db._rollback_on_exception,django.core.signals.got_request_exception)

def main():
  # Re-add Django 1.0 archive to the path, if needed.
  if django_path not in sys.path:
    sys.path.insert(0, django_path)

  # Create a Django application for WSGI.
  application = django.core.handlers.wsgi.WSGIHandler()

  # Run the WSGI CGI handler with that application.
  util.run_wsgi_app(application)

if __name__ == '__main__':
  main()

 接下来就可以写自己的应用了

P.S.:已知一个bug,使用压缩包的话无法使用国际化即设置的语言,有空我发到Google group上去反映一下。其实这个方法和以前是一样的,只不过django_path不同罢了。

分享到:
评论
6 楼 zbird 2008-12-09  
正好在整这个东西。
在windows下会有问题,提示
'module' object has no attribute 'unlink'
在网上看了下GAE将os的unlinlk给禁用了。
需要做点修改。
在main.py里加上
if os.name == 'nt':
  os.unlink = lambda: None
5 楼 elfer 2008-12-08  
我比较喜欢django的url映射,不过不能用admin的确是最为可惜之处
4 楼 范三山 2008-11-25  
如果连admin都没法用了那还有什么意思,google也不想点办法,太没诚意了
3 楼 woods 2008-11-25  
范三山 写道

我还没有试过在gae上用django,我现在想知道的是有哪些django的模块是没法用的

Feeds就不太好用:( 正苦恼这个..
还有admin...
2 楼 范三山 2008-11-25  
我还没有试过在gae上用django,我现在想知道的是有哪些django的模块是没法用的
1 楼 woods 2008-11-24  
hi 你好 我想知道django_path具体怎么修改呢?

我还没有转到1.0 用的还是自带的 0.96, 想问下现在1.0运行在GAE上成熟么? 有没有什么严重的缺陷?

相关推荐

    zlib-devel-1.2.7-17.el7.x86_64.rar

    zlib是一个广泛使用的数据压缩库,Python的zipimport模块在处理ZIP格式的Python包时会依赖它。 在Python环境中,当你尝试使用pip安装一些依赖zlib的第三方库,或者安装了包含ZIP格式的Python源码(如.whl文件)时,...

    xp可以使用的python3.5

    该版本是第三方通过官方源码修改编译的,可以在xp上运行,据说不支持基于zipimport的功能. 来自: https://segmentfault.com/q/1010000003805066

    CentOS 7下安装并配置Python 3.pdf

    总的来说,安装Python 3.6在CentOS 7上需要关注依赖的处理,以及在编译时添加适当的选项以确保所有功能正常工作。对于系统管理员和开发者而言,理解这个过程可以帮助他们更好地管理自己的Python环境,特别是需要...

    centos7jumpserver联网手动编译环境.docx

    在安装过程中,可能会出现`zipimport.ZipImportError: can't decompress data; zlib not available`的错误。为了解决这个问题,我们需要确保系统已经安装了zlib库。你可以通过运行`yum install zlib-devel`来安装它...

    python3安装方法

    例如,可能会出现 `zipimport.ZipImportError: can't decompress data` 错误。解决方法是: 1. 安装 zlib 相关依赖包:`sudo apt-get install libz*` 2. 重新执行 `make install` 命令 环境配置 安装完成后,需要...

    python-importtime-graph:显示由python -X importtime报告的时序的树状图

    该程序将在stderr上输出时序统计信息: import time: self [us] | cumulative | imported package import time: 137 | 137 | zipimport import time: 674 | 674 | _frozen_importlib_external import time: 84 | ...

    基于centos7 安装python3.6.4出错的解决方法

    在Linux系统中,CentOS 7 是一个广泛使用的服务器操作系统,而Python则是一种强大的编程语言,经常被用于系统管理、Web开发以及各种自动化任务。在本文中,我们将深入探讨如何解决在CentOS 7上安装Python 3.6.4时...

    zlib-devel-1.2.7-18.el7.x86-64.rpm

    安装Python-3.6.5,执行 make && make install ———————————————— ...报错:zipimport.ZipImportError: can't decompress data; zlib not available ————————————————

    Linux下安装Python3.6及避坑指南

    在Linux环境下安装Python3.6是一个相对复杂的过程,但遵循正确的步骤和注意事项可以确保安装顺利。本文将详细讲解Linux下Python3.6的...遵循这些指导,你将能成功地在Linux系统上安装Python3.6,并避免常见的安装陷阱。

    zip和gcc 错误,以及python的卸载,各种解压代码

    所以就会出错,pip3.8无法装上的原因 zipimport.ZipImportError: can’t decompress data; zlib not available make: *** [install] Error 1 这时候 yum install zlib* -y gmake: g++: Command not found gmake: **...

Global site tag (gtag.js) - Google Analytics