使用Git / PyCharm维护Lite项目的精简版和专业版

时间:2016-08-09 12:55:34

标签: python git pycharm code-duplication

背景

我正在收集一个python项目,我正在考虑用pro / lite版本发布它。当然,我不想要重复的代码,但我不能发布一个免费版本,只有少数 if 检查禁用专业版的许多功能:代码是一个Blender附加组件,因此如果功能仍然存在,将很容易编辑并转换为专业版。

问题

使用Git / Pycharm维护这样的项目的最佳方法是什么(或者我最好不要担心精简版)没有重复的代码I have read that using multiple Git branches is not the way to go.

声明

我确实意识到关于这个话题有很多类似的问题。然而,其中许多涉及使用Xcode,而且还有更多没有明确的答案。不要误会我的意思,我知道我可以以多种方式做到这一点 - 但我正在寻找最好的方式,最干净的方式。

1 个答案:

答案 0 :(得分:2)

这是基本的想法,基于您将代码分离到不同的模块。目前,该概念有2个不同的下载点。但这不是必须的,这是你的召唤。

无论采用哪种打包/分发方法,您都必须将代码行分离到不同的代码模块中。即使它只是一次下载。

lite / common_core.py - 从github.lite安装

#things you want in common between pro and lite
#i.e. what would be your "duplicate code"
def common_func1():
    pass

注意:我不会将pro和lite中常见的东西直接放到lite / main.py中,因为你想通过展示精简版中的pro来呈现一个统一的API,但是你也不想拥有专业版import lite,因为这可能会导致循环导入依赖性。

lite / main.py - 从github.lite安装

#things you want in common between pro and lite
import lite.common_core
#or import lite.common_core as common

def lite_function1():
    pass

def lite_function2():
    pass

try:
    #you need to determine an appropriate path strategy
    #a pypi-installed pro package should be available on the sys.path
    from pro.main import *
    # or import pro.main as pro
except ImportError:
    pass

#client code can now call functions from the lite and pro

pro / main.py - 从github.pro

安装
import lite.common_core

def pro_function1():
    pass

你可以将lite作为pro pypi包的要求,这样如果用户以这种方式启动,用户仍然只能进行一次下载。

另外,对于你指向re git branches的答案,另一种思考方式是你可能正在尝试修复/增强说 pro 。所以,从 pro的主人,你想要自由创建一个新的分支,并且仍然知道 lite的主人(因为你依靠它)。如果你在同一个回购中使用专业版和精简版来处理这种记账将会很困难,用分支来分离专业/精简版。