Django中安装的应用程序版本呢?

2024-05-17 03:19:46 发布

您现在位置:Python中文网/ 问答频道 /正文

在看了实用Django项目的可重用应用章节并听了DjangoCon(Pycon?)讲座中,似乎有一个重点是通过将你的应用程序安装到Python路径(即站点包)中,使你的应用程序可插拔。在

我不明白的是,当其中一个安装的应用程序的版本发生变化时会发生什么。如果我更新一个安装到站点包中的应用程序,那么这不会破坏我当前所有使用它的项目吗?我从来没注意到设置.py你可以指定要导入的应用程序的版本。在

我认为在Ruby/Rails中,他们可以冻结gem来应对这种情况。但是我们应该在Python/Django中做什么呢?在


Tags: 项目djangopy路径版本插拔应用程序重点
3条回答

同一个包有多个版本会很麻烦(但是setuptools可以做到)。在

我发现将每个项目放在自己的virtualenv中更为简洁。我们使用virtualevwrapper来轻松地管理virtualenv,使用 no-site-packages选项使每个项目真正独立并跨机器移植。在

这是recommended setup for mod_wsgi servers。在

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

正如kenarnold所回答的,最好的方法是使用ianbicking的virtualenv(虚拟Python环境构建器)。如果必须运行Django的多个版本,这一点尤其正确。在

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

我们做什么。在

我们只把“第三方”的东西放在网站包。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/

我们使用版本号作为应用程序名称的一部分。这是主版本号,与模式相关,因为“使用相同的模式”是主要版本兼容性的一个定义。在

您必须迁移数据并证明新版本中的工作正常。然后可以删除旧版本并从数据库中删除架构。迁移数据很有挑战性,因为你不能同时运行两个应用程序。在

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

相关问题 更多 >