【发布时间】:2015-04-17 13:53:17
【问题描述】:
目前我在mastergit分支中有如下目录结构:
/dir1
__init__.py
module.py
这将更改为(在我的分支中):
/dir1
__init__.py
/dir2
module1.py # With 70% of code of module.py
module2.py # With 30% of code of module.py
问题:
我知道不可能让
git跟踪两个新文件,但由于git识别重命名(并且它认为将文件夹组织为重命名)我将能够跟踪对module.py的更改master 分支到我的分支的module1.py,至少对于 70% 的代码(我必须手动更新module2.py)。那么有没有更好的办法来处理呢?
1234563但这会带来与
sys 路径变量混淆的危险,出于稳定性和安全性考虑,不建议这样做。有没有更好的方法可以使 API 向后兼容并且仍然安全/稳定?
但是,我的情况比较复杂。对于更具代表性的示例,请考虑从:
/dir1
__init__.py
module_2.py
def add2(a, b):
return a + b
def sub2(a, b):
return a - b
module_3.py
def add3(a, b, c):
return a + b + c
到:
/dir1
__init__.py
/dir2
__init__.py
module_add.py
# ... Constitutes 70% of code from `dir1/module_2.py`
def add2(a, b):
return a + b
# A few more additional lines added from `dir1/module_3.py`
def add3(a, b, c):
return a + b + c
module_sub.py
# Constitutes the 30% from /dir1/module2.py
def sub2(a, b):
return a - b
所以本质上,我将dir1/module_2.py 和dir1/module_3.py 的不同功能分开,并将它们重新组合成单独的module_add.py 和module_sub.py,并将其放在/dir1/dir2 下
但是,获得版本 2 软件包的版本 1 用户应该仍然可以这样做:
from module_2 import add2, sub2
from module_3 import add3
我不能做的事:
- 在
dir1中有module_2.py或module_3.py(我需要git 来关联和跟踪主分支的dir1/module_2.py到我的分支的dir1/dir2/module_2.py); - 以任何会降低稳定性/安全性的方式更改或弄乱
sys.path;或 - 将
dir2重命名为例如module_2。
【问题讨论】:
-
你真的需要避免
module.py吗?你可以只创建一个module.py来实现from dir2.module1 import *和from dir2.module2 import *。 -
@BrenBarn 这是当前设置... :) 没有定义
module.py可以帮助我跟踪更改(至少 70%)到modue.py在我的分支的dir2/module1.py.. . -
@jonrsharpe 破坏了 API 的向后兼容性;)
-
如果以前他们这样做
from dir1.module import abc我不希望他们现在这样做from dir1.dir2.module1 import abc或from dir1 import abc...我需要这个的原因是,工作是针对维护良好且广泛使用的开源包...它需要至少 2 个发布周期来强制用户执行from dir1.dir2.module1 import abc或from dir1 import abc...所以需要一种干净的方法来保持它向后兼容。 ..(为了我/其他开发人员的方便,可以通过 git 跟踪) -
啊,太聪明了;) 真的很抱歉,结构有点复杂,
dir2是几个这样的module-s 的集合...感谢您的耐心回复 :)
标签: python git packages setuptools