把django应用 打包 发布成 可独立运行的桌面程序
需求:在pc上运行django+sqlite应用,无须安装django python 数据库 web服务器 。。。
传统django 应用运行在 apache or nginx fastcgi,偽了方便我们用cherrypy来作WEB服务器。
cx_freeze 跨平台的python 打包工具
步骤:
1:下载安装 cx_freeze cherrypy
2 依赖关系 提前导入 项目依赖的包
import django.contrib.auth
import django.contrib.contenttypes
import django.contrib.sessions
import django.contrib.sites
import django.contrib.admin
#these pertain to your application
import subway.models
import subway.views
import urls
import manage
import settings
import django.db.models.sql.compiler
from django.contrib.auth.backends import *
from django.conf.urls.defaults import *
#these are django imports
import django.template.loaders.filesystem
import django.template.loaders.app_directories
import django.middleware.common
import django.contrib.sessions.middleware
import django.contrib.auth.middleware
import django.middleware.doc
import django.contrib.messages
import django.contrib.staticfiles
import django.contrib.messages.middleware
import django.contrib.sessions.backends.db
import django.contrib.messages.storage.user_messages
import django.db.backends.sqlite3.base
import django.db.backends.sqlite3.introspection
import django.db.backends.sqlite3.creation
import django.db.backends.sqlite3.client
import django.contrib.auth.context_processors
from django.core.context_processors import *
import django.contrib.messages.context_processors
import django.contrib.auth.models
import django.contrib.contenttypes.models
import django.contrib.sessions.models
import django.contrib.sites.models
import django.contrib.messages.models
import django.contrib.staticfiles.models
import django.contrib.admin.models
import django.template.defaulttags
import django.template.defaultfilters
import django.template.loader_tags
#dont need to import these pkgs
#need to know how to exclude them
import email.mime.audio
import email.mime.base
import email.mime.image
import email.mime.message
import email.mime.multipart
import email.mime.nonmultipart
import email.mime.text
import email.charset
import email.encoders
import email.errors
import email.feedparser
import email.generator
import email.header
import email.iterators
import email.message
import email.parser
import email.utils
import email.base64mime
import email.quoprimime
import django.core.cache.backends.locmem
import django.templatetags.i18n
import django.templatetags.future
import django.views.i18n
import django.core.context_processors
import django.template.defaulttags
import django.template.defaultfilters
import django.template.loader_tags
from django.conf.urls.defaults import *
import django.contrib.admin.views.main
import django.core.context_processors
import django.contrib.auth.views
import django.contrib.auth.backends
import django.views.static
import django.contrib.admin.templatetags.log
import django.contrib.admin.templatetags.adminmedia
import django.conf.urls.shortcut
import django.views.defaults
#let us hook up cherrypy
#is it possible to hook up the dev server itself?
import cherrypy
from cherrypy import wsgiserver
from django.core.handlers.wsgi import WSGIHandler
from django.core.servers.basehttp import AdminMediaHandler
from django.conf import settings
from django.utils import translation
3: 编写setup文件
from cx_Freeze import setup, Executable
import cx_imports
setup(
name = "ehome",
version = "1.0",
description = "the typical 'Hello, world!' script",
options = dict(build_exe = {'include_files': ['templates','media']}),#拷贝 admin的模板 资源文件
executables = [Executable("ehome.py")])
4: 替换 urls.py中 admin.autodiscover() 成
import django.contrib.auth.admin
#import django.contrib.contenttypes.admin
import django.contrib.sites.admin
否则 后台出现 无权限访问的提示
5: 启动服务
import cherrypy
from cherrypy import wsgiserver
from django.core.handlers.wsgi import WSGIHandler
from django.core.servers.basehttp import AdminMediaHandler
from django.conf import settings
from django.utils import translation
if __name__ == "__main__":
# django.core.management.base forces the locale to en-us. We should
# set it up correctly for the first request (particularly important
# in the "--noreload" case).
translation.activate(settings.LANGUAGE_CODE)
try:
path = './media'
handler = AdminMediaHandler(WSGIHandler(), path)
cherrypy.config.update({
'server.socket_host': 'localhost',
'server.socket_port': 8000,
'log.error_file': 'site.log',
'engine.autoreload_on': True
})
cherrypy.config.update({'environment': 'production',
'log.error_file': 'site.log',
'log.screen': False})
cherrypy.tree.graft(handler, '/')
cherrypy.engine.start()
cherrypy.engine.block()
finally:
cherrypy.engine.exit()
总结: 中间碰到好多问题
1:cx_freeze 文档很少
2:django 用了很多动态加载module的地方 都要手工 一一 import进来
参考:
http://www.jjude.com/2008/04/make-your-django-application-as-a-stand-alone-desktop-application/
http://toolsforagile.com/blog/archives/51
分享到:
相关推荐
Django项目打包执行教程,亲测可用,可对python文件和Django程序进行打包发布,保护源码,Django源码保护
python3.6及Django打包exe文件详细教程,打包亲身体验,对各种坑的解决,实际环境编写。
Django打包生成exe,在win环境开机自启动前言配置环境先生成.spec文件通常情况下,直接打包(你无法提前预知缺少的module)运行exe将exe文件写入bat写.vbs文件放入win启动文件中 前言 该文章是本人在实际项目中遇到的...
vagrant-django-template, Vagrant下运行 Django 应用的框架项目 vagrant-django-templateVagrant开发的Django 1.9项目模板。 提供的功能包括:一个 Vagrantfile,用于构建基于Ubuntu的虚拟机一个 virtualenv ( 配置...
django核心运行原理,很强大的文档,利于读懂django。
django-dropbox, 一个 Django 应用程序,包含使用Dropbox的Django 存储 django版本 0.1.2什么django Dropbox是一个 Django 应用程序,它包含一个使用Dropbox的Django 存储。安装 ofpip install django-dropbox将
微信小程序会议室预约微信小程序+Django服务端后台源码微信小程序会议室预约微信小程序+Django服务端后台源码微信小程序会议室预约微信小程序+Django服务端后台源码微信小程序会议室预约微信小程序+Django服务端后台...
python基于django的新闻发布管理系统源码 python基于django的新闻发布管理系统源码 python基于django的新闻发布管理系统源码 python基于django的新闻发布管理系统源码 python基于django的新闻发布管理系统源码 ...
基于Django快速开发Web应用
使用 Docker 部署 Django web 应用.zip使用 Docker 部署 Django web 应用.zip使用 Docker 部署 Django web 应用.zip使用 Docker 部署 Django web 应用.zip使用 Docker 部署 Django web 应用.zip使用 Docker 部署 ...
Docker是一个开源项目,为开发人员和系统管理员提供了一个开放平台,可以将应用程序构建、打包为一个轻量级容器,并在任何地方运行。Docker 会在软件容器中自动部署应用程序。 Django 是一个用 Python 编写的 Web ...
ios运行django的例子
资源选自《Python变成从入门到实践》一书,该书提供三个Python入门项目,此为第三个项目Web应用程序,利用Python的Django模块创建和运行Web应用程序。开发顺序可参见我的一片博文。
会议室预约小程序+Django服务端后台源码 会议室预约小程序+Django服务端后台源码 会议室预约小程序+Django服务端后台源码 会议室预约小程序+Django服务端后台源码 会议室预约小程序+Django服务端后台源码 ...
django-auditlog, 保存对对象所做更改的Django 应用程序 请记住,这个应用还在开发中。 在生产环境中部署这里应用程序之前,请先对它的进行英镑测试。 django-auditlog ( Auditlog ) 是一个用于 Django的可以重用...
demo-allauth-bootstrap, Django 示例应用程序,包括通过 Django AllAuth提供社会认证的用户 demo-allauth-bootstrap简单,out-of-the-box Django 网站带有访问者( 无登录) 区域和用户( 需要登录) 区域,它的中注册...
android运行django例子
django-docker-cloud-template- 用于创建可以运行在 Docker 云上Django应用程序的模板
Django Horizon 用于Django应用程序的简单数据库分片(水平分区)库
安装为了遵循一些Debian打包指南以及LSB / FHS标准,以下层次结构用于Django安装: 地点目的/usr/lib/django-debian Virtualenv根目录,这是应用程序依赖项所在的只读位置。 其他脚本(例如manage.py和gunicorn_...