代码之家  ›  专栏  ›  技术社区  ›  Shane C. Mason

在桌面上部署Django应用程序有哪些成功的方法?

  •  4
  • Shane C. Mason  · 技术社区  · 17 年前

    我有一个Django应用程序,我想部署到桌面上。我读了一些关于这方面的文章,发现一种方法是使用 freeze . 我过去曾在Python应用程序中使用过这种方法,但我不认为它是Django应用程序的最佳方法。

    我的问题是:您使用了哪些成功的方法来部署Django应用程序?是否有一个事实上的标准方法?你有没有走到死胡同?我需要一个跨平台的解决方案。

    2 回复  |  直到 16 年前
        1
  •  6
  •   Ramin    17 年前

    几年前,我为一个作为本地守护进程运行的Django应用程序做了这件事。它由Twisted启动,由py2app for Mac和py2exe for Windows包装。它既有一个浏览器,也有一个空中前端。它在大多数情况下运行得很好,但我没有在野外部署它,因为更大的项目被推迟了。已经有一段时间了,我对细节有些生疏,但这里有一些提示:

    • IIRC,最大的问题是Python加载C扩展。我用C“asm”命令编写了一个英特尔汇编模块,我需要加载这些命令来获取低级系统数据。这需要一段时间才能跨两个平台工作。如果可以,尽量避免使用C扩展。

    • 你肯定需要一个安装程序。该应用程序很可能最终在后台运行,因此您需要将其标记为Windows服务、Unix守护程序或Mac launchd应用程序。

    • 在安装程序中,您需要提供一种方法来定位免费的本地TCP端口。您可能需要编写一个安装程序运行的小存根例程,或者使用安装程序的内置脚本功能来查找尚未使用的端口,并将其保存到配置文件中。然后将配置文件加载到settings.py和要部署的任何前端中。那是共享端口。或者,你可以随意选择一个数字,希望桌面上没有其他服务会让你措手不及:-)

    • 如果你的前端和后端是独立的应用程序,那么你需要为它们设计一个API,以便它们相互通信。确保提供了一个标志,以返回原始和人类可读形式的数据。它确实有助于调试。

    • 您可能希望坚持使用SQLite for database,在这种情况下,您需要确保使用信号量来处理多个争夺数据库(或任何其他共享资源)的请求。如果您的应用程序是通过浏览器访问的,则用户可以打开多个窗口并同时点击该应用程序。如果使用自定义前端(本机、Air等),则可以控制在给定时间运行的实例数,这样就不会有太大问题。

    • 您还需要对本地系统日志记录设施进行某种访问,因为应用程序将在后台运行,并确保捕获所有异常并将其路由到系统日志中。一个大麻烦是调试Windows服务启动问题。如果没有系统日志记录,这是不可能的。

    • 如果要保持跨平台,请小心硬编码路径。您可能需要依赖安装程序编写一个配置文件条目,其中包含启动时必须加载的实际安装路径。

        2
  •  4
  •   Glyph    17 年前

    我建议使用 py2exe py2app 在MacOS X上,和建筑物上 deb .desktop 文件位于软件包的正确位置,以便在用户菜单中显示条目。不幸的是,对于最后一个选项,没有方便的“py2deb”或“py2xdg”,但是手工制作相关的文本文件非常容易。

    Twisted as your web server 使应用程序易于自包含:)。