8

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

我发现了几种方法:

  1. 仅分发 .pyc 文件并在目标机器上构建和安装所有要求。
  2. 使用众多工具之一将 Python 应用程序打包到可分发的包中。

我真的很想选择 nr.2 选项,我希望包含我的 Django 应用程序,因此可以分发它而无需安装或配置其他东西。搜索互联网给我提供了比答案更多的问题和一个非常酸的味道,Django 打包是一种每个人都知道但没人谈论的神秘艺术。:)

我已经尝试过 Freeze(失败)、Cx_freeze(简单安装版本失败,存储库版本有效,但应用程序输出失败)并在 dbuilder.py 上重新启动(它应该可以工作,但实际上并不能正常工作 - 我猜)。如果我理解正确,大多数问题都源于 Django 导入模块的方式(示例),但我不知道如何解决它。

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

4

2 回答 2

7

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

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

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

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

这是一篇包含有关 virtualenv 的信息的博客文章,以及有关其他一些不错的工具的讨论:现代 Python 黑客工具:Virtualenv、Fabric 和 Pip

于 2009-12-07T10:07:08.823 回答
0

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

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

于 2009-12-07T09:36:58.900 回答