12

来自构建和项目管理工具比比皆是的 Java 开发,我想知道 Django 有什么可用的。我真的很想使用 Maven 之类的东西来构建东西,但是还有另一种首选的方法吗?

我真的在寻找以下内容:

  • 命令行构建:mvn install非常简单和酷。
  • 命令行测试运行。我想将此应用程序集成到 Hudson 之类的东西中以进行持续集成,因为我是这样的铁杆。
  • 将媒体部署到本地测试服务器(JS、CSS、图像等)

这目前可以通过 Maven 或其他工具实现吗?我在这里开始了一个相当大的项目,我希望拥有一个像 Maven 这样的极好的构建/项目管理系统,以帮助项目能够随着时间的推移而发展。

4

2 回答 2

7

我想到了两个工具,它们都是通用的 python 工具——它们不需要专门与 Django 一起使用:

  • 面料。我们用这个;它允许我们像 SSH 一样编写远程命令,上传代码等。这些不是你不能做的,因为它本质上是一个用 python 编写的 bash 脚本,所以很容易上手。但它也是一个用 python 编写的 bash 脚本,这意味着您可以导入 django 应用程序的部分内容,运行测试或在运行部署过程中执行 python 可以做的任何事情。
  • 扩建。我没有使用过这个,但是我们的 django 前端开发人员告诉我这绝对是可以使用的工具。猜测一下,它要么是相同的想法,要么是更抽象、更面向 python 的等价物。

我确信还有其他可用的软件包。我能给你的最好建议是简要评估它们,然后选择最适合你的场景/团队工作方式的。请注意,这些主要是部署工具 - 在 python 中构建并没有真正意义,因为您不编译 python 代码。

就 CI 相关的东西而言,您需要了解来自 django 的三个命令:

  • ./manage.py test 从所有tests.py文件运行您的测试。这些基本上是 django 特定的增强unittest,一个 python 包。
  • ./manage.py collectstatic将静态文件收集到您选择的目录中;对于将所有位放在一起以存在于静态媒体服务器上非常有用。查看静态文件 howto以了解其工作原理。
  • 你需要South来做这个,./manage.py schemamigration app --auto && ./manage.py migrate app- 这会将模型更改应用于底层 sql 模式。基本上,如果你只是改变一个模型而不使用 south,Django 会非常沮丧,因为新字段不会映射到旧的 sql 模式,它也无法持久化你的模型。south 支持的模式迁移使您能够升级现有的填充数据库。在自动化之前值得手工操作。
  • 我还应该指出,您可以编写自定义管理命令来执行./manage.py whatever you like。这具有相当大的潜力——例如,我使用管理命令作为在 cron 作业中执行的命令。您还可以为应用程序的管理员构建交互式命令,当然还有部署和测试。

如何处理这些实际上取决于您可用的设置以及您选择的工具。

编译时:最接近使用 python 构建的是 freeze,也就是 py2exe 或 cxfreeze,它们会生成二进制文件。请注意,尽管所有这些都是将 python 字节码存储在一个 exe 中并通过解释器传递它,但无论如何它都是一个共享对象。此外,您不能 cxfreeze django 应用程序,因为 django 本身使用在运行时发生的动态导入,因此不能由 cxfreeze 评估,这本质上是一个编译时工具。因此,将建筑视为一项需要完成的任务。您可能会看到.pyc文件出现在您的目录中 - 如果自上次 pyc 以来对其进行了更改,python 会将您的 python 脚本转换为 python 字节码。如果未进行任何更改,则加载pyc上次的文件。Python 字节码是被执行的,所以这并不是真正的性能加速,只是加载时间。

于 2011-07-21T23:51:13.780 回答
0

如果您需要一些东西来管理和重现您的 (Django) python 环境,那么我建议您将pipvirtualenv作为 Buildout 的替代方案。

这篇SaltyCrane 文章描述了在 Django 中使用 pip。本文描述了 Ubuntu 上的过程,但我们在 Ubuntu 和 OSX 上都使用了类似的设置。

我们在 buildout 和 pip 方面都有经验,发现 pip 比 buildout 更容易、更可靠且更容易扩展。

于 2011-07-24T10:33:36.660 回答