作者:五味子120的马甲 | 来源:互联网 | 2023-06-29 09:44
我有一个Django应用程序,我想部署到桌面.我已经阅读了一些内容,并看到一种方法是使用freeze.我在过去对Python应用程序使用了不同的成功,但我不相信它是Django应用
我有一个Django应用程序,我想部署到桌面.我已经阅读了一些内容,并看到一种方法是使用freeze.我在过去对Python应用程序使用了不同的成功,但我不相信它是Django应用程序的最佳方法.
我的问题是:您用于部署Django应用程序的成功方法是什么?有事实上的标准方法吗?你有没有死路一条?我需要一个跨平台的解决方案.
解决方法:
几年前我为一个运行本地守护进程的Django应用程序做了这个.它由Twisted发布,由py2app for Mac和py2exe for Windows包装.有一个浏览器和一个Air前端击中它.它在大多数情况下工作得很好,但我没有在野外部署它,因为较大的项目被推迟了.已经有一段时间了,我对细节有点生疏,但这里有一些提示:
> IIRC,最有问题的是Python加载C扩展.我有一个用C“asm”命令编写的英特尔汇编程序模块,我需要加载它来获取低级系统数据.这需要一段时间才能在两个平台上运行.如果可以,请尝试避免C扩展.
>你肯定需要一个安装程序.该应用最有可能最终在后台运行,因此您需要将其标记为Windows服务,Unix守护程序或Mac启动应用程序.
>在安装程序中,您需要提供一种查找空闲本地TCP端口的方法.您可能必须编写安装程序运行的小存根例程,或使用安装程序的内置脚本工具来查找尚未执行的端口并将其保存到配置文件中.然后,在settings.py中加载配置文件,以及要部署的任何前端.那是共享端口.或者你可以选择一个随机数,并希望桌面上的其他服务没有你的脚趾:-)
>如果您的前端和后端是单独的应用程序,那么您需要为它们设计一个API来相互通信.确保提供一个标志,以原始和人类可读的形式返回数据.它确实有助于调试.
>如果您希望Django能够向用户发送通知,您将需要与Growl集成或获取Python for Windows扩展,以便您可以调出烤箱弹出通知.
>您可能希望坚持使用SQLite for database,在这种情况下,您需要确保使用信号量来处理争夺数据库(或任何其他共享资源)的多个请求.如果您的应用程序是通过浏览器访问的,则用户可以打开多个窗口并同时点击该应用程序.如果使用自定义前端(本机,Air等等),那么您可以控制在给定时间运行的实例数量,这样就不会出现问题.
>您还需要某种对本地系统日志记录工具的访问权限,因为应用程序将在后台运行,并确保捕获所有异常并将其路由到syslog中.一个很大的麻烦是调试Windows服务启动问题.没有系统记录就不可能.
>如果要保持跨平台,请注意硬编码路径.您可能必须依赖安装程序来编写配置文件条目,其中包含您在启动时必须加载的实际安装路径.
>测试实际部署,尤其是在各种防火墙上.一些桌面防火墙非常积极地阻止访问接受传入请求的网络服务.
这就是我所能想到的.希望能帮助到你.