创建便携式Django应用 - 需要帮助

8 投票
2 回答
2034 浏览
提问于 2025-04-15 16:45

我正在开发一个Django应用程序,目前在Ubuntu Linux主机上运行得很顺利(测试中 :))。我想把这个应用打包,不带源代码,然后分发到另一台生产机器上。理想情况下,我希望通过执行./runapp命令来启动一个CherryPy服务器,从而运行这个Python/Django代码。

我发现了几种方法可以做到这一点:

  1. 只分发.pyc文件,并在目标机器上构建和安装所有的依赖。
  2. 使用许多工具中的一种,将Python应用打包成可分发的包。

我特别想选择第二种方法,我希望我的Django应用能够独立打包,这样就可以分发,而不需要安装或配置额外的东西。在网上搜索后,我发现的问题比答案还多,让我觉得Django的打包是一门神秘的艺术,大家都知道,但没人愿意谈论。:)

我尝试过Freeze(失败了),Cx_freeze(简单安装版失败,仓库版可以用,但应用输出失败),还看过dbuilder.py(本来应该能用,但实际上并不行 - 我想是这样)。如果我理解得没错,大多数问题都源于Django导入模块的方式(例如),但我不知道该如何解决。

如果有人能提供一些关于打包/分发独立Django应用的建议或好的在线资源,我会非常感激。

2 个回答

0

--noreload这个选项会让Django停止自动检测哪些模块发生了变化。我不确定这样做是否能解决问题,但有可能会有效。

还有一个选择(虽然不是最好的办法)是把你的一些核心功能打包成一个dll文件,然后让你的普通文本代码去调用这个dll。

7

我建议你把你的发行版建立在 setuptools 上,这是一种可以增强标准Python发行机制的工具,叫做 distutils

使用setuptools,你可以创建一个包含你应用程序的Python蛋(egg)。这个蛋的元数据可以包含一个依赖列表,这些依赖会通过 easy_install 自动安装(可以包括Django和你使用的任何第三方模块/包)。

setuptools/distutils的发行版可以包含一些脚本,这些脚本会被安装到 /usr/bin 目录下,这样你就可以把你的 runapp 脚本包含进去。

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

这里有一篇博客文章,里面有关于virtualenv的一些信息,还有讨论其他一些不错的工具: 现代Python黑客的工具:Virtualenv、Fabric和Pip

撰写回答