把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 Web 应用程序打包安装包可以方便地部署和分发应用。下面是一种常见的将 Django Web 应用程序打包安装包的方法: 1. 创建项目目录:在你的项目根目录下,创建一个用于打包的文件夹,例如 `packaging`。 2. 创建安装脚本:在 `packaging` 文件夹下创建一个名为 `setup.py` 的安装脚本文件。这个脚本将会定义你的应用程序的元数据和安装过程。 ```python from setuptools import setup, find_packages setup( name='your-app-name', version='1.0', packages=find_packages(), install_requires=[ 'Django', # 添加其他依赖库 ], entry_points={ 'console_scripts': [ 'your-app-name = your_app_name.manage:main', ] }, ) ``` 在 `setup()` 函数中,你需要提供应用程序的名称、版本号、依赖库等信息。如果你的应用程序有自定义的管理命令,可以在 `entry_points` 中指定入口命令。 3. 创建 MANIFEST.in 文件:在 `packaging` 文件夹中创建一个名为 `MANIFEST.in` 的文件。这个文件用于指定需要包含在安装包中的文件和目录。 ``` include README.md recursive-include your_app_name/static * recursive-include your_app_name/templates * ``` 在这个文件中,你可以使用通配符来指定需要包含的文件和目录。 4. 打包应用程序:在项目根目录下打开命令行终端,进入 `packaging` 文件夹,并执行以下命令来打包应用程序: ``` python setup.py sdist ``` 这将会生一个名为 `dist` 的文件夹,其中包含了打包后的安装包文件。 5. 安装和部署:将生的安装包文件(`.tar.gz` 或 `.zip`)部署到你想要安装应用程序的服务器上。在服务器上执行以下命令来安装应用程序: ``` pip install your-app-name-1.0.tar.gz ``` 这将会安装你的应用程序及其依赖库。 以上步骤是将 Django Web 应用程序打包安装包的一种常见方法。你可以根据自己的需求和项目结构进行调整和修改。另外,还可以考虑使用更高级的工具,如 Docker、PyInstaller 等,来进一步简化部署过程和提供更强大的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值