我想使用 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__':
,从我读到的内容来看,它与相对导入无关:
http://mail.python.org/pipermail/python-list/2006-October/408945.html
http://www.velocityreviews.com/forums/t502905-relative-import-broken.html
我在谷歌上搜索到的另一个解决方案是故意操纵 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/