如何在Django中重用可重用的应用程序

时间:2009-02-17 14:50:23

标签: python django code-reuse


我正在尝试在Django中创建我的第一个网站,因为我正在寻找示例应用程序以从中汲取灵感,我经常偶然发现一个名为“可重用应用程序”的术语

我理解可重用的应用程序的概念,但在Django中重用应用程序的方法对我来说完全不见了。在整个企业中,很少有问题困扰我:

重用现有Django应用程序的首选方法是什么?我把它放在哪里以及如何参考它?

根据我的理解,建议将它放在你的“PYTHONPATH”上,但是一旦我需要将我的应用程序部署到我有限访问权限的远程位置(例如在托管服务上),它就会中断。

因此,如果我在本地计算机上开发我的网站并打算将其部署在我只有ftp访问权限的ISP上,我该如何重新使用第三方Django应用程序,这样如果我部署我的网站,该网站会保留工作(例如我唯一能指望的是服务提供商安装了​​Python 2.5和Django 1.x)?

如何组织我的Django项目,以便我可以轻松地将它与我想要使用的所有可重用应用程序一起部署?

2 个答案:

答案 0 :(得分:26)

通常,使用可重用应用程序所需的唯一方法是确保它位于sys.path上,以便您可以从Python代码中导入它。在大多数情况下(如果作者遵循最佳实践),可重用的应用程序tarball或bundle将包含带有docs的顶级目录,README,setup.py,然后是包含实际应用程序的子目录(请参阅{{ 3}}例如; app本身位于“voting”子目录中)。该子目录需要放在Python路径中。这样做的可能方法包括:

  • 正在运行pip install appname,如果应用已上传到django-voting(这些日子大部分都是)
  • 使用setup.py install安装应用程序(这与pip install appname的结果相同,但要求您先自行下载并解压缩代码; pip会为您执行此操作)
  • 手动将代码目录符号链接到Python site-packages目录
  • 使用PyPI之类的软件创建一个“虚拟Python环境”,该环境具有自己的site-packages目录,然后在该virtualenv处于活动状态时运行setup.py installpip install appname,或放置或在virtualenv的site-packages中对应用程序进行符号链接(强烈推荐所有“全局安装”选项,如果你重视未来的理智)
  • 将应用程序放在您打算放置各种应用程序的某个目录中,然后将该目录添加到PYTHONPATH环境变量中

如果您可以启动Python解释器并“导入投票”(例如)而不会收到ImportError,您就会知道自己已经找到了正确的位置。

在只有FTP访问权限的服务器上,您唯一的选择就是最后一个,他们必须为您设置。如果他们声称支持Django,他们必须提供某些位置,您可以在其中上传包,并且可以在Python中导入。如果不知道你的webhost的细节,就不可能说出它们是如何为你构建的。

答案 1 :(得分:2)

一个老问题,但这就是我的所作所为:

如果您正在使用版本控制系统(VCS),我建议将您的软件所需的所有可重用应用程序和库(包括django)放在VCS中。如果您不想将它们直接放在项目根目录下,可以修改settings.py以将它们的位置添加到sys.path。

在部署之后,只需将VCS存储库克隆或签出到您想要使用它的位置即可。

这有两个好处:

  • 版本不匹配;您的软件始终使用您测试的版本,而不是部署时可用的版本。
  • 如果多人参与该项目,则没有其他人必须处理安装依赖项。

何时更新组件的版本,在VCS中更新它,然后通过它将更新传播到您的部署。