`
hqman
  • 浏览: 368096 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

把django应用 打包 发布成 可独立运行的桌面程序

 
阅读更多

把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-vue3-admin 基于RBAC模型的权限控制的一整套基础开发平台,权限粒度达到列级别,前后端分离

    Electron是一个使用JavaScript、HTML和CSS等前端技术创建跨平台的桌面应用程序的框架,它允许开发者使用网页技术来构建应用程序的界面部分,并通过它可以打包成原生应用程序运行在Windows、macOS和Linux上。...

    Python技术框架使用方法.docx

    PyQt 应用程序可以跨平台运行,并能被打包为独立的可执行文件,方便分发。 总的来说,Django 适合构建大型、功能丰富的 Web 应用,Flask 则更适合轻量级的 Web 开发或个人项目,而 PyQt 则在桌面应用和 GUI 设计...

    基于python的企业管理系统(点击exe即可双击).rar

    2. **打包成exe**:Python程序通常需要Python环境才能运行,但通过工具如PyInstaller、cx_Freeze等,可以将Python项目打包成独立的exe文件,使得非Python环境的用户也能直接运行。 3. **GUI编程**:为了提供用户...

    linux_application_development

    4. Docker:容器化技术使得应用可以被封装为独立的运行环境,便于部署和移植。 5. GitOps:结合Git和持续集成/持续部署(CI/CD)工具如Jenkins、GitLab CI/CD,实现自动化的代码发布流程。 通过以上知识点的学习和...

    python是个什么东西---python---pyqt做的一个浏览器

    Qt是一个跨平台的C++库,提供了一系列用于创建桌面和移动应用程序的工具。PyQt结合了Python的易用性与Qt的强大功能,使得开发者可以在Python中构建功能丰富的桌面应用,包括浏览器。 描述中的“pyqt做的一个浏览器...

    dreamtalk.zip

    如果是桌面应用,可能通过PyInstaller或cx_Freeze将Python代码打包成独立的可执行文件。 10. 文档编写:"说明.txt"可能是使用reStructuredText或Markdown格式编写的,这两种格式在Python社区中很常见,用于生成项目...

    毕业设计,大学生兼职信息平台,前端,后台管理系统,小程序和后台.zip

    - 微服务架构:大型项目可能采用微服务架构,将各个功能模块拆分为独立的服务,提高可扩展性和维护性。 - 云服务:可能使用阿里云、腾讯云等云服务商,进行服务器租赁、数据库托管和CDN分发,保证平台的稳定运行。...

    Apps

    3. **桌面应用**:对于桌面应用,Python有PyInstaller和cx_Freeze等工具,可以将Python代码打包成独立的可执行文件,便于在不同操作系统上运行。 4. **游戏开发**:Pygame是Python的一个模块,专为游戏开发设计,它...

    物联网方向学习课程体系

    4. **本地可执行文件**:打包成独立的可执行程序。 5. **移动APP开发**:使用Kivy等跨平台工具开发移动应用。 #### 七、Python开发辅助支持 1. **物联网开发优化**:提高开发效率的方法。 2. **专属小工具**:定制...

Global site tag (gtag.js) - Google Analytics