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

Posted

技术标签:

【中文标题】如何在 Django 中重用可重用的应用程序【英文标题】:How to re-use a reusable app in Django 【发布时间】:2010-10-08 02:46:20 【问题描述】:

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

我了解可重用的应用程序的概念,但在 Django 中重用应用程序的方法对我来说非常迷茫。在整个业务中困扰我的几个问题是:

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

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

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

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

【问题讨论】:

【参考方案1】:

一般来说,使用可重用应用程序唯一需要做的就是确保它位于 sys.path 上,以便您可以从 Python 代码中导入它。在大多数情况下(如果作者遵循最佳实践),可重用应用程序 tarball 或捆绑包将包含一个***目录,其中包含 docs、一个 README、一个setup.py,然后是一个包含实际应用程序的子目录(请参阅django-voting一个例子;应用程序本身位于“投票”子目录中)。这个子目录需要放在你的 Python 路径中。这样做的可能方法包括:

运行pip install appname,如果应用程序已上传到PyPI(现在大多数是) 使用setup.py install 安装应用程序(这与pip install appname 的结果相同,但需要您先下载并自行解压缩代码;pip 将为您完成) 手动将代码目录符号链接到您的 Python 站点包目录 使用像 virtualenv 这样的软件创建一个“虚拟 Python 环境”,它有自己的站点包目录,然后运行 ​​setup.py installpip install appname 并激活该 virtualenv,或者将应用程序放置或符号链接到 virtualenv 的站点包(如果您重视未来的理智,强烈推荐所有“全局安装”选项) 将应用程序放置在您打算放置各种应用程序的某个目录中,然后将该目录添加到 PYTHONPATH 环境变量中

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

在您只有 FTP 访问权限的服务器上,您唯一的选择实际上是最后一个,他们必须为您设置。如果他们声称支持 Django,他们必须提供 一些 可以上传包的地方,并且可以在 Python 中导入它们。如果不知道您的虚拟主机的详细信息,就不可能说出他们如何为您构建它。

【讨论】:

【参考方案2】:

一个老问题,但这是我要做的:

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

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

这有两个额外的好处:

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

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

【讨论】:

我有点倾向于 virtualenv 路线。这是一种更简洁的方法,并且编写 virtualenv 设置脚本并不难,因此“提交者”也会很好地设置它(我和任何人一样懒惰,所以每当我想重新启动时,我更喜欢整洁将我的环境重新创建为一堆手动步骤的脚本...)

以上是关于如何在 Django 中重用可重用的应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何为 django 可重用应用程序启动测试?

如何在可重用的应用程序中将命名空间 url 与 django 一起使用

在实际生产项目中部署(管理依赖)django 可重用应用程序的最佳实践是啥?

django 可重用应用程序:删除迁移中的依赖项?

为可重用的 Django 应用程序创建迁移

在 Django 项目中为可重用应用程序创建基于类的 Celery 任务