如何在 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 install
或 pip install appname
并激活该 virtualenv,或者将应用程序放置或符号链接到 virtualenv 的站点包(如果您重视未来的理智,强烈推荐所有“全局安装”选项)
将应用程序放置在您打算放置各种应用程序的某个目录中,然后将该目录添加到 PYTHONPATH 环境变量中
如果您可以启动 Python 解释器并“导入投票”(例如)而不会收到 ImportError,那么您就会知道您已经在正确的位置。
在您只有 FTP 访问权限的服务器上,您唯一的选择实际上是最后一个,他们必须为您设置。如果他们声称支持 Django,他们必须提供 一些 可以上传包的地方,并且可以在 Python 中导入它们。如果不知道您的虚拟主机的详细信息,就不可能说出他们如何为您构建它。
【讨论】:
【参考方案2】:一个老问题,但这是我要做的:
如果您使用的是版本控制系统 (VCS),我建议将您的软件所需的所有可重用应用程序和库(包括 django)都放在 VCS 中。如果您不想将它们直接放在项目根目录下,可以修改 settings.py 以将它们的位置添加到 sys.path。
在部署之后,只需将 VCS 存储库克隆或检出到您想要使用的任何位置即可。
这有两个额外的好处:
版本不匹配;您的软件始终使用您对其进行测试的版本,而不是部署时可用的版本。 如果有多个人参与该项目,则无需其他人处理依赖项的安装。当需要更新组件的版本时,请在您的 VCS 中更新它,然后通过它将更新传播到您的部署。
【讨论】:
我有点倾向于 virtualenv 路线。这是一种更简洁的方法,并且编写 virtualenv 设置脚本并不难,因此“提交者”也会很好地设置它(我和任何人一样懒惰,所以每当我想重新启动时,我更喜欢整洁将我的环境重新创建为一堆手动步骤的脚本...)以上是关于如何在 Django 中重用可重用的应用程序的主要内容,如果未能解决你的问题,请参考以下文章
如何在可重用的应用程序中将命名空间 url 与 django 一起使用