python - 如何使用 python 模块的多个 git 分支?

标签 python git module

我想使用 git 来同时处理我正在编写的模块中的多个功能。我目前正在使用 SVN,只有一个工作区,因此我的 PYTHONPATH 上只有该工作区。我意识到这不太理想,所以我想知道是否有人可以建议一种更“正确”的方法来做到这一点。

让我用一个假设的情况来详细说明: 我说我有一个模块“eggs”,带有子模块“foo”和“bar”。 “bar”中的组件使用 foo 中的代码,因此 Eggs/bar/a.py 可以“导入 Eggs.foo”。

假设“eggs”位于 git 存储库中。我想尝试对“foo”进行一些更改,所以我复制了它。问题是 Eggs/bar 中的“import Eggs.foo”在 PYTHONPATH 中找到了原始存储库,因此它最终使用旧的“foo”而不是我修改过的。

我如何设置自己以便模块的每个副本都使用自己关联的“foo”?谢谢。

编辑-感谢您指向相对导入的指针。我已经阅读过它并且知道如何应用它。我使用它时遇到的一个问题是,我已经构建了一个相当大的代码库,而且我对它还不太整洁,所以大多数模块在 if __name__ == 下都有一个快速的“自测试” '__main__':,从我读到的内容来看,它与相对导入无关:

我在谷歌上搜索到的另一个解决方案是故意操纵 sys.path,这似乎是一个更糟糕的黑客行为。还有其他可能吗?

编辑 - 感谢您的建议。我最初误解了 git 分支,所以正如所指出的,分支正是我想要的。尽管如此,我之前从未听说过相对进口,所以也谢谢你。我学到了一些新东西并且可能会融入它的用途。

最佳答案

Relative imports ( PEP 328 ) 可能有帮助:

eggs/
  __init__.py
  foo.py
  bar.py

# foo.py
from __future__ import absolute_import
from . import bar

参见How do you organize Python modules?其他选项。

编辑:

还有一个选择是使用 S.Lott 和 Jim 的建议,即重构您的包以分解出 eggs.bar.a 使用的 eggs.foo 部分,并使用 git 在实验分支上工作(请参阅 Git Community Book )。

这是一个例子:

$ git status
# On branch master
nothing to commit (working directory clean)

[只是为了确保一切都好]

$ git checkout -b experimental
Switched to a new branch "experimental"

[从事实验性工作]

$ git commit -a

[提交到实验分支]

$ git checkout master
Switched to branch "master"

[在主分支上工作]

$ git commit -a

将更改 merge 到主分支:

$ git merge experimental

参见章节Basic Branching and Merging摘自上述书籍。

关于python - 如何使用 python 模块的多个 git 分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/343517/

相关文章:

python - 找到一个xml标签并将标签名称替换为python

python - 为什么我在这个 try-catch-finally block 中遇到错误?

git - 当前分支上有未提交的更改时 checkout 另一个分支

传递给库元谓词的目标的模块扩展

ruby-on-rails - Ruby:Mixin,它添加了动态实例方法,其名称是使用类方法创建的

python - 我应该使用 `__setattr__` ,属性还是...?

python - 如何将字典列表转换为数据框?

git - 尝试开始使用 git

git - 如果仅更改特定文件,则触发 jenkins 构建

module - 在现代 Fortran 中的模块中使用子例程加载派生类型