7

我正在开发一个 django 项目,使用 git 进行代码管理。主项目有许多应用程序作为子模块,每个应用程序都可以独立使用,因此每个应用程序都在单独的 git repos 中。所有这些应用程序都在开发中,并且至少有一个是从另一个项目中派生出来的。这些应用程序可以通过 pip 安装,克隆 repo 时,根目录中有 setup.py 和 README 等,然后是子文件夹中的实际应用程序。

如果我 pip install 应用程序,那么工作代码将与 git 管理下的文件夹位于不同的位置,所以每次我更改我需要的代码时pip install(或者是否有另一个 pip 命令?)更新 python 正在寻找它的代码

我可以pip install -e用来防止上述情况。但是,然后我需要将每个应用程序克隆到单独的文件夹中:我不能只将应用程序克隆到project/apps并拥有project/apps/fooproject/apps/bar因为它们都会尝试将它们的 setup.py 放入project/apps. 相反,我需要将 foo 克隆到project/apps/foo但实际代码在project/apps/foo/foo. 这让我觉得很丑,而且不是很 django-ish。

有没有其他更漂亮的方式来做我想做的事情?

4

1 回答 1

3

我认为你真正想要使用的是一个需求文件(而不是完全使用 git 子模块)加上你的项目的virtualenv

使用需求文件,您可以直接从给定分支或提交克隆 repos,例如:

要求.txt:

Django==1.4.1
South==0.7.6
git+git://github.com/fabric/fabric#egg=Fabric
git+git://github.com/toastdriven/django-tastypie.git@876c0541e2531d3b6e070ffab906f7c6e359c427#egg=django-tastypie

然后就可以运行了pip install -r requirements.txt

你会从tastepie示例中注意到,你可以将你的pip安装锁定到一个特定的提交(只要你留在你的virtualenv中就可以了),这基本上与子模块所做的事情相同,但不会弄乱你的git repo或文件当确实应该将它们安装到您无论如何采购的单独位置时,使用包构建结构。

于 2012-09-26T01:42:33.480 回答