使用 Git/PyCharm 维护 Python 项目的精简版和专业版
Maintaining a Lite and Pro Version of Python Project with Git/PyCharm
背景
我正在完成一个 python 项目,我正在考虑发布一个 pro/lite 版本的项目。当然,我不希望出现重复代码,但我无法发布免费版本,因为专业版的许多功能只能通过一些 if 检查来禁用:代码用于 Blender 插件,因此如果功能仍然存在,将很容易编辑并变成专业版。
问题
使用 Git/Pycharm 维护这样的项目的最佳方法是什么(或者我最好不要担心精简版)没有重复代码 ?
免责声明
我知道有很多关于这个话题的类似问题。然而,其中许多涉及使用 Xcode,还有更多没有明确的答案。不要误会我的意思,我知道我 可以 以多种方式做到这一点 - 但我正在寻找 最好的 方式, 最干净方式。
这是基于您将代码分离到不同模块中的基本想法。现在,这个概念有 2 个不同的下载点。但这不一定是,那是你的决定。
无论您采用哪种 packaging/distribution 方法,您都必须将代码行分离到不同的代码模块中。即使只有一个下载。
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 中,因为你想通过在 lite 中公开 pro 来呈现统一的 API,但你没有不想也有 pro 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
您可以将精简版作为 pro pypi 软件包的要求,这样如果用户以这种方式开始,他们仍然只能下载一个。
此外,关于您指向 git 分支的答案,另一种思考方式是您可能正在尝试 fix/enhance 说 pro.所以,从 pro 的 master,你想要自由地创建一个新的分支,并且仍然知道 lite 的 master(因为你依赖它).如果你在同一个回购协议上兼顾专业版和精简版,那么这种记账会很困难,分支用于分隔 pro/lite.
背景
我正在完成一个 python 项目,我正在考虑发布一个 pro/lite 版本的项目。当然,我不希望出现重复代码,但我无法发布免费版本,因为专业版的许多功能只能通过一些 if 检查来禁用:代码用于 Blender 插件,因此如果功能仍然存在,将很容易编辑并变成专业版。
问题
使用 Git/Pycharm 维护这样的项目的最佳方法是什么(或者我最好不要担心精简版)没有重复代码 ?
免责声明
我知道有很多关于这个话题的类似问题。然而,其中许多涉及使用 Xcode,还有更多没有明确的答案。不要误会我的意思,我知道我 可以 以多种方式做到这一点 - 但我正在寻找 最好的 方式, 最干净方式。
这是基于您将代码分离到不同模块中的基本想法。现在,这个概念有 2 个不同的下载点。但这不一定是,那是你的决定。
无论您采用哪种 packaging/distribution 方法,您都必须将代码行分离到不同的代码模块中。即使只有一个下载。
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 中,因为你想通过在 lite 中公开 pro 来呈现统一的 API,但你没有不想也有 pro 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
您可以将精简版作为 pro pypi 软件包的要求,这样如果用户以这种方式开始,他们仍然只能下载一个。
此外,关于您指向 git 分支的答案,另一种思考方式是您可能正在尝试 fix/enhance 说 pro.所以,从 pro 的 master,你想要自由地创建一个新的分支,并且仍然知道 lite 的 master(因为你依赖它).如果你在同一个回购协议上兼顾专业版和精简版,那么这种记账会很困难,分支用于分隔 pro/lite.