创建可移植的Django应用程序 - 需要帮助

时间:2009-12-07 09:04:57

标签: python linux django cherrypy software-distribution

我正在构建一个Django应用程序,我在Ubuntu Linux主机上轻松运行(测试:))。我想打包没有源代码的应用程序,并将其分发到另一台生产机器。理想情况下,应用程序可以通过./runapp命令运行,该命令启动运行python / django代码的CherryPy服务器。

我发现了几种方法:

  1. 仅分发.pyc文件,并在目标计算机上构建和安装所有要求。
  2. 使用众多工具之一将Python应用程序打包成可分发的包。
  3. 我真的正在寻找nr.2选项,我想要包含我的Django应用程序,因此可以分发它而无需安装或配置其他内容。搜索互联网给我提供了更多的问题而不是答案,而且非常酸的味道,Django包装是一种神秘的艺术,每个人都知道,但没有人说。 :)

    我试过Freeze(失败),Cx_freeze(简易安装版本失败,存储库版本工作,但应用程序输出失败)并在dbuilder.py上重做(这应该可以工作但不会工作真的 - 我猜)。如果我理解正确,大多数问题都源于Django导入模块的方式(例子),但我不知道如何解决它。

    如果有人能在网上提供有关打包/分发独立Django应用程序的任何指示或良好资源,我将非常高兴。

2 个答案:

答案 0 :(得分:7)

我建议您将发行版基于setuptools(一种增强标准Python发行版机制distutils的工具)。

使用setuptools,您应该能够创建包含应用程序的Python egg。 egg的元数据可以包含easy_install自动安装的依赖项列表(可以包括Django +您使用的任何第三方模块/包)。

setuptools / distutils发行版可以包含将安装到/usr/bin的脚本,这样就可以包含runapp脚本。

如果您不熟悉virtualenv,我建议您也看一下。这是一种创建独立Python环境的方法,它对于测试发行版非常有用。

这是一篇博客文章,其中包含有关virtualenv的一些信息,以及关于其他一些有用的知识工具的讨论:Tools of the Modern Python Hacker: Virtualenv, Fabric and Pip

答案 1 :(得分:0)

--noreload选项将停止Django自动检测哪些模块已更改。我不知道是否会解决这个问题,但可能会这样。

另一种选择(并不理想)是通过将其打包为纯文本代码将调用的dll来掩盖您的一些核心功能。