【问题标题】:Installed apps in Django - what about versions?在 Django 中安装的应用程序 - 版本呢?
【发布时间】:2009-06-09 02:08:14
【问题描述】:

在查看了 Practical Django Projects 的可重用应用程序章节并听了 DjangoCon(Pycon?)讲座之后,似乎强调通过将应用程序安装到 Python 路径(即站点包)中来使它们可插入。

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

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

【问题讨论】:

    标签: python django version-control


    【解决方案1】:

    拥有同一个包的多个版本会很麻烦(不过,setuptools 可以做到)。

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

    这是recommended setup for mod_wsgi servers

    【讨论】:

    • 将 virtualenv 与 pip 结合使用会更好。
    • 澄清:'--no-site-packages' 选项适用于来自 'virtualenvwrapper' 的 mkvirtualenv 命令:'mkvirtualenv --no-site-packages
    【解决方案2】:

    如果您有多个 Django 站点,您肯定不想将您的 Django 应用程序放入站点包中。

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

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

    【讨论】:

      【解决方案3】:

      我们做什么。

      我们只在站点包中放置“第 3 方”内容。 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/
      

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-20
        • 1970-01-01
        • 2021-04-18
        • 1970-01-01
        • 1970-01-01
        • 2014-03-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多