Django中安装的应用程序 - 版本怎么样?

时间:2009-06-09 02:08:14

标签: python django version-control

在查看Practical Django Projects的可重用应用程序章节并听取DjangoCon(Pycon?)讲座后,似乎强调通过将应用程序安装到Python路径(即site-packages)来使您的应用程序可插入。

我不明白的是,当其中一个安装的应用程序的版本发生变化时会发生什么。如果我更新安装到site-packages的其中一个应用程序,那么这不会打破我使用它的所有当前项目吗?我从来没有注意到settings.py中的任何内容,您可以指定要导入的应用程序的版本。

我认为在Ruby / Rails中,他们能够在这种情况下冻结宝石。但是我们应该在Python / Django中做些什么呢?

3 个答案:

答案 0 :(得分:5)

同一个软件包的多个版本会变得混乱(但是setuptools可以做到这一点。)

我发现将每个项目放在自己的virtualenv中更加清晰。我们使用virtualevwrapper轻松管理virtualenvs,使用--no-site-packages选项使每个项目真正自包含并可跨机器移植。

这是recommended setup for mod_wsgi servers

答案 1 :(得分:0)

如果你有多个Django网站,你肯定不想把你的Django应用程序放到网站包中。

Ken Arnold回答说,最好的方法是使用Ian Bicking的virtualenv(虚拟Python环境构建器)。如果您必须运行多个版本的Django,则尤其如此。

但是,如果您可以运行单个版本的Python和Django,那么将应用程序安装到项目目录中可能会更容易一些。这样,如果外部应用程序得到更新,您可以根据需要逐个升级每个项目。这是一次用于外部Django应用程序的结构Pinax,但我认为它现在使用virtualenv + pip(而不是setuptools / distutils)。

答案 2 :(得分:0)

我们做什么。

我们只将“第三方”内容放入网站包中。 Django,XLRD,PIL等

我们将整个项目结构化为包和Django项目的集合。每个项目都是整个站点的一部分。端口80和端口443(SSL)有两个不同的行为。

OverallProject/

    aPackage/
    anotherPackage/

    djangoProject80/
        settings.py
        logging.ini
        app_a_1/
            models.py # app a, version 1 schema
        app_a_2/
            models.py # app a, version 2 schema
        app_b_2/
            models.py
        app_c_1/
            models.py

    djangoProject443/

    test/
    tool/

我们使用版本号作为应用名称的一部分。这是主要版本号,并且与架构相关联,因为“uses-the-same-schema”是主要版本兼容性的一个定义。

您必须迁移数据并证明新版本中的工作正常。然后,您可以删除旧版本并从数据库中删除架构。迁移数据具有挑战性,因为您无法并排运行这两个应用程序。

大多数应用程序只安装了一个当前版本。