【问题标题】:Project management/build tools for a Django project? [closed]Django 项目的项目管理/构建工具? [关闭]
【发布时间】:2011-10-10 16:11:59
【问题描述】:

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

我真的在寻找以下内容:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    我确信还有其他可用的软件包。我能给你的最好建议是对它们进行简要评估,然后选择最适合你的场景/团队工作方式的。请注意,这些主要是部署工具 - 在 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 模式并且它不能持久化你的模型。 south 支持的模式迁移使您能够升级现有的填充数据库。值得在自动化之前手工完成。
    • 我还应该指出,您可以写custom management commands 来执行./manage.py whatever you like。这具有相当大的潜力——例如,我使用管理命令作为在 cron 作业中执行的命令。您还可以为应用程序的管理员构建交互式命令,当然还有部署和测试。

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

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

    【讨论】:

    • Buildout 很棒。我很确定这正是我正在寻找的。谢谢!
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-19
      • 2013-06-17
      相关资源
      最近更新 更多