Django项目的项目管理/构建工具?

时间:2011-07-21 23:27:45

标签: django maven project-management continuous-integration build-management

来自Java开发,其中构建和项目管理工具比比皆是,我想知道Django可用的内容。我真的很喜欢使用像Maven这样的东西来构建东西,但还有另一种首选的方法吗?

我真的在寻找以下内容:

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

Maven或其他工具目前是否可以使用?我正在这里开展一个非常大的项目,我希望有一个像Maven这样的踢腿建设/项目管理系统,以帮助项目随着时间的推移而增长。

2 个答案:

答案 0 :(得分:7)

有两种工具可供选择,它们都是通用的python工具 - 它们无需专门用于Django:

  • Fabric。我们用这个;它允许我们编写远程命令,好像我们是SSH,上传代码等。这些并不是你不能做的,因为它本质上是一个用python编写的bash脚本,它很容易上手。但它也是一个用python编写的bash脚本,这意味着你可以导入你的django应用程序的一部分,运行你的测试或者做python在运行你的部署过程中可以做的任何事情。
  • Buildout。我没有用过这个,但是我们的django前端开发人员告诉我这绝对是使用的工具。在猜测中,它既可以是相同的想法,也可以是稍微更抽象,更具蟒蛇风格的等价物。

我相信还有其他套餐可供选择。我能给你的最好建议就是简单地评估它们并选择最适合你的场景/团队工作方式的那个。请注意,这些主要是部署工具 - 在python中构建并不真正有意义,因为您不编译python代码。

就CI相关内容而言,您需要了解django的三个命令:

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

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

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

答案 1 :(得分:0)

如果你需要一些东西来管理和重现你的(Django)python环境,那么我建议用pip virtualenv来代替Buildout。

这个SaltyCrane article描述了使用与Django的pip。本文描述了Ubuntu上的过程,但是我们在Ubuntu和OSX上使用了类似的设置。

我们对buildout和pip都有经验,发现pip比buildout更容易,更可靠,更容易扩展。