【问题标题】:How to develop multiple pip packages in a git project?如何在一个git项目中开发多个pip包?
【发布时间】:2012-09-17 14:01:53
【问题描述】:

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

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

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

还有其他更漂亮的方法来做我想做的事情吗?

【问题讨论】:

  • 我有点困惑——您应该使用pip 安装这些应用程序,或者直接克隆应用程序并使用它们。在几乎所有情况下,您都将使用子模块或 pip(可能通过需求文件),但不能同时使用两者。

标签: python django git pip


【解决方案1】:

我认为您真正想要使用的是 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

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

【讨论】:

  • 如果我对这些应用程序进行更改,我可以将它们推送回 github?
  • 当然,只要它们是您的应用程序。对于个人项目,我通常会修复我正在使用的某人的库中的错误,提交拉取请求,然后将我的需求文件指向我的分叉存储库,直到修复被上游合并。
  • 这就是设置egg 所做的事情:例如,当我需要使用django-tastypie 的fork 时,我将需求文件中的行更改为指向我的fork,但留下@ 987654327@同理;这有效地将包更新到您想要的任何版本。
  • 注意:您将在单独的存储库和位置对这些应用程序进行更改,然后在使用前将它们推送回 github。这意味着您无法轻松测试项目中应用程序的更改——您必须有单独的测试项目来更新应用程序——但这无论如何都是好的代码/存储库设计的一部分;这些应用程序中的每一个都应该有自己的测试用例;如果它们都将依赖于中心项目运行,它们不应该是单独的存储库。
  • 需求文件 URL 损坏;导致404错误。请尽可能更新。
猜你喜欢
  • 2019-01-11
  • 2016-08-01
  • 1970-01-01
  • 2010-11-20
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
相关资源
最近更新 更多