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

Jak*_*keD 5 python git code-duplication pycharm

背景

我正在结束一个python项目,我正在考虑用pro/lite版本发布它.当然,我不希望重复的代码存在,但我不能发布一个免费版本,其中许多专业版的功能仅在几个if检查时被禁用:代码用于Blender附加组件,因此如果功能仍然存在,将很容易编辑并转换为专业版.

使用Git/Pycharm维护这样的项目的最佳方法是什么(或者我最好不要担心精简版)没有重复的代码我已经读过使用多个Git分支不是要走的路.

放弃

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

JL *_*ret 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
Run Code Online (Sandbox Code Playgroud)

注意:我不会将 pro 和 lite 通用的东西直接放入 lite/main.py 中,因为你想通过在 lite 中暴露 pro 来呈现统一的 API,但你不想同时导入 pro 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
Run Code Online (Sandbox Code Playgroud)

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

import lite.common_core

def pro_function1():
    pass
Run Code Online (Sandbox Code Playgroud)

您可以将 lite 作为 pro pypi 软件包的要求,这样用户如果以这种方式开始,仍然只能下载一次。

另外,对于您指向 re git 分支的答案,另一种思考方式是您可能正在尝试修复/增强pro。因此,从pro 的 master中,您希望能够自由地创建新分支,并且仍然了解lite 的 master(因为您依赖它)。如果您在同一个存储库上同时使用专业版和精简版,并使用分支来分离专业版/精简版,那么这种簿记将会很困难。