如何在git项目中开发多个pip包?

时间:2012-09-26 01:31:39

标签: python django git pip

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

如果我pip安装应用程序,那么工作代码将位于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。

还有其他一些更漂亮的方法可以做我想做的事吗?

1 个答案:

答案 0 :(得分:3)

我认为您真正想要使用的是requirements file(而不是使用git子模块)和项目的virtualenv

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

requirements.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

你会从tastypie示例中注意到你可以将你的pip安装锁定到一个特定的提交(只要你留在你的virtualenv就好了),这与子模块无论如何都是一样的,但是没有混乱你的git包含repo或文件结构时,如果它们确实应该安装到您提供的单独位置。