3

如果需要对代码进行少量更改,如何将 3rd 方 Django 应用程序拉入我的 Djano 项目?我需要能够:

  1. 合并上游更改
  2. 提交新功能/模组的拉取请求
  3. 在多个项目中使用修改后的应用
  4. 能够使用我的 Django 项目部署修改后的应用程序
  5. 保持私密(可选)

现有的半解决方案

在这个话题上似乎有很多混乱。我似乎提出的方法是:

方法# 1 - pip/virtualenv - 将项目保存在单独的 repo 中并将其添加到 python 路径。优点:将代码干净地划分为单独的项目可能总体上更干净,不太复杂 缺点:在本地开发时需要更复杂的管理来更新依赖关系。

2 - git submodule - 使用 submodules 模块将代码拉入你的 Django 项目目录。优点:似乎确实有效,而子树不能很好地处理这个 Django 应用案例缺点:更复杂的部署

3 - git subtree - 使用 subtree 模块将代码拉入您的 Django 项目目录。我自己对此进行了更多探索,您可以在此处查看http://projects.madteckhead.com/django-superproject-3rd-party-git-repo-subdirectories-mapped-mapped-to-apps/ 优势:代码和历史记录保留Django 项目,易于部署,并降低了协作者的复杂性。缺点:似乎无法将子目录或存储库“挂载”到项目的子目录中,如果可以的话……我无法弄清楚如何合并上游更改。

4 - 将有问题的第 3 方应用程序复制到 django 项目应用程序目录中。优点:简单缺点:不能轻易合并更改,或提交请求请求

问题是 Python 包实际上在 repo 的子目录中有应用程序。例如thirdpartyapp/thirdpartyapp/setup.pythirdpartyapp/thirdpartyapp/[所有感兴趣的代码都在这里]

问题

任何人都可以阐明如何最好地将多个 3rd 方 django 应用程序合并到一个 django 项目中,对它们进行更改/合并上游更改。

我真的很感激一个干净的工作流程,它是我回馈我在 Django 中使用的应用程序的主要障碍之一。

非常感谢,

4

2 回答 2

1

我使用方法# 1 (pip/virtualenv) 有一段时间了,我觉得管理或开发第 3 方应用程序的代码并不复杂。

在使用 3th 方应用程序的外部存储库的完整路径的方式中requirements.txt,pip 会将这些应用程序安装在PROJECT_ROOT/env/src/application_dir具有任何版本控制系统的所有优点的目录中。在那里,您可以开发、拉取更改到您自己的 fork 或像使用通常的 git 子模块一样做任何事情。

如果您需要对第三方应用程序进行更改或应用一些补丁,而不需要对外部存储库进行更改但能够在生产中进行更改,我可以推荐您使用fabriclassed包。我是Fabric工具的简单包装器,可帮助您使用具有少量默认任务的类来组织 fab 文件。例如,使用 fabriclassed,您可以使用自动生成的 *.diff 文件和命令修补 virtualenv 目录中的任何依赖项:

# to dump all diffs of 3th party applications
$ fab diff_dump

# to patch all 3th party applications
$ fab patch
于 2012-02-24T12:27:04.007 回答
0

我将使用git submodules。这样做有很大的优势,因为如果您必须与其他人合作开发一个不属于您的主要存储库并且正在由其他人大量开发的应用程序,那么您会更好。它在技术上并不复杂。

于 2012-06-26T22:47:54.453 回答