2009-06-09 58 views
1

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

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

我觉得在Ruby/Rails中,他们能够冻结宝石出现这种情况。但是,我们应该在Python/Django中做什么?

回答

5

让同一个包的多个版本变得混乱(setuptools可以做到这一点)。

我发现它吸尘器把每个项目都在自己的virtualenv。我们使用virtualevwrapper来轻松管理virtualenvs,并使用--no-site-packages选项来使每个项目真正独立并可跨机器移植。

这是recommended setup for mod_wsgi servers

+0

将virtualenv与pip结合使用使其更好。 – Apreche 2009-06-10 20:41:14

0

你肯定不希望把你的Django应用归入站点包,如果你有一个以上的Django的网站。

最好的办法,因为肯·阿诺德回答,是使用伊恩Bicking的virtualenv(虚拟Python环境生成器)。如果您必须运行多个版本的Django,则尤其如此。

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

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”是主要版本兼容性的一个定义。

您必须迁移数据并证明这些数据在新版本中有效。然后,您可以删除旧版本并从数据库中删除模式。迁移数据具有挑战性,因为您无法并行运行这两个应用程序。

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

相关问题